为什么评估过程离不开 jq
现代评估工具的 JSON 输出动辄上万条记录,人工翻看没有意义。jq 是命令行 JSON 处理器:按字段筛选、按条件过滤、聚合计数、导出表格,把工具输出变成可以直接进报告或下一步流程的数据。它是评估流水线里的通用转换层。
基本信息
| 基础表达式 | .field 取字段、. [] 遍历数组、length 计数 |
|---|---|
| 筛选 | select(条件) 保留满足条件的记录 |
| 输出格式 | -r 去掉字符串引号、@tsv 制表符、@csv 逗号分隔 |
| 统计 | 与 sort、uniq -c 组合做分布统计 |
| 安装 | 多数发行版仓库直接提供,注意版本差异影响部分函数 |
典型使用场景
- 从 httpx 结果里提取存活主机清单,供后续检测使用
- 统计 nuclei 命中按等级与模板的分布,先看有没有异常集中
- 把 JSON 转成 TSV 交给表格软件做人工复核
- 对比两轮结果差异,找出新增与消失的条目
- 从大体积日志中抽取指定字段,减小共享文件的敏感面
处理示例
处理示例
# 先摸清结构,再写筛选表达式
jq 'length' nuclei.json
jq 'keys' nuclei.json
# 提取 URL 列表
jq -r '.[].url' httpx.json | sort -u
# 按字段筛选并输出制表符格式,便于比对
jq -r 'select(.severity == "high") | [."template-id", .host] | @tsv' nuclei.json | sort | uniq -c
# 转 CSV 交给表格软件
jq -r '.[] | [.host, .port, .status] | @csv' scan.json > scan.csv常用表达式读法
| 表达式 | 作用 | 易错点 |
|---|---|---|
| .[] | 遍历数组元素 | 对象上使用会报错 |
| select(.x) | 保留字段存在的记录 | 字段缺失时条件为假而非报错 |
| length | 数组或对象长度 | 字符串长度含义不同 |
| @tsv 与 @csv | 结构化导出 | 字段内含分隔符会错行 |
| -r | 原始字符串输出 | 漏写会带来多余引号 |
| map 与 splits | 数组变换与拆分 | 对 null 元素操作会报错 |
拿不准结构时先用 length 与 keys 探路,再逐步叠加管道:一次性写出长表达式,出错了很难定位是哪一段的问题;常用的表达式随手记进项目笔记,复测与同类项目可以直接复用。
不同工具与版本的字段名会变化:处理前先看一条真实记录再去写表达式。字段名不匹配时 jq 往往静默返回空结果而不是报错,把空结果当成无发现是最常见的一类误判,统计前先确认过滤条件确实能命中数据。