You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取CVE列表文件调用curl获取Severity返回空值,求排查解决

问题解决:CVE接口调用返回空值的排查与修复

可能的原因及对应解决方案

1. 输入文件存在行尾特殊字符(如Windows换行符\r)

如果你的cves.csv是Windows格式保存的,每行末尾会带有\r字符,导致拼接后的URL包含无效字符,接口返回空。

修复方法:读取行时清除所有空白字符(包括换行、回车、空格):

while read -r line; do
    # 清除行首行尾的所有空白字符(包括\r、空格等)
    cve=$(echo "$line" | xargs)
    echo "处理CVE:$cve"
    # 后续操作使用$cve而非$line
done < "$filename"

2. curl静默模式隐藏了错误信息

你用了-s参数,curl会屏蔽错误输出,导致你看不到连接失败、404等问题。

修复方法:临时去掉-s,或者加上-v查看详细请求日志:

# 临时调试用,查看请求和响应详情
curl -v "https://cve.circl.lu/api/cve/$cve"
# 或者保留静默但显示错误
curl -s -S "https://cve.circl.lu/api/cve/$cve"

3. API接口需要请求头(如User-Agent)

部分API会拦截无标识的请求,添加User-Agent可以解决:

cve_result=$(curl -s -A "Mozilla/5.0" "https://cve.circl.lu/api/cve/$cve")

4. 完整可运行脚本(含Severity提取与CSV输出)

结合以上修复,最终脚本可以解析JSON提取Severity,并输出到目标CSV:

#!/bin/bash

filename="cves.csv"
output="cve_severity.csv"

# 写入CSV表头
echo "cve-id,cve-severity" > "$output"

while read -r line; do
    # 清理CVE ID的多余字符
    cve=$(echo "$line" | xargs)
    # 跳过空行
    [ -z "$cve" ] && continue

    echo "正在处理:$cve"
    # 调用API,添加User-Agent,保留错误输出
    cve_result=$(curl -s -S -A "Bash CVE Scraper" "https://cve.circl.lu/api/cve/$cve")
    
    # 用jq提取severity(需要先安装jq:sudo apt install jq / brew install jq)
    severity=$(echo "$cve_result" | jq -r '.cvss[]?.severity // "Unknown"')
    
    # 写入结果到CSV
    echo "$cve,$severity" >> "$output"

    # 避免请求过快触发速率限制
    sleep 1
done < "$filename"

echo "处理完成,结果已保存到$output"

注意事项

  • 确保安装了jq工具,用于解析JSON响应。如果没有安装,根据你的系统用包管理器安装。
  • 添加sleep 1是为了避免频繁请求触发API的速率限制,防止被临时封禁。
  • 如果部分CVE返回"Unknown",说明该CVE在接口中没有Severity数据。

内容的提问来源于stack exchange,提问作者liltitus27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:15:38