概述:从 RedHat 获取 CVE 数据并保存到 json 文件
来源
主要是看到开源的漏扫工具,基本都用了类似的 API 接口来获取漏洞信息。参考 [【架构】[【架构】CVE扫描工具架构收集|CVE扫描工具架构收集
其中 cve-bin-tool 用了多个平台的数据 - Redhat - Open Source Vulnerability Database (OSV) - Gitlab Advisory Database (GAD)](https://advisories.Gitlab.com/),
选哪个平台的数据
我个人只看了 Redhat 平台的获取结果,感觉够用了,并且 Redhat 有一套自己的评分系统。
Redhat
API Documents
Documents
需求描述
从文件读取 CVE 列表,根据 CVE 命从 RedHat 获取相关信息并保存。
实现代码
逻辑比较简单,这里就不赘述了。
import requests
import sys
import json
import os
def read_CVE_list(filename):
lines = open(filename, 'r').readlines()
return [line.strip() for line in lines]
def request_CVE_json(cve_list):
for cve in cve_list:
# 获取 CVE JSON 并处理
# 构建 GitHub API URL
api_url = f'https://access.redhat.com/hydra/rest/securitydata/cve.json?ids={cve}'
# 向 GitHub API 发起 GET 请求
response = requests.get(api_url)
if response.status_code != 200:
print(f'Error: Failed to fetch repositories. Status code: {response.status_code}')
continue
# 解析 JSON 响应并保存到CVE目录下的同名文件中
# 若 CVE 目录不存在,则创建
if not os.path.exists('CVE'):
os.makedirs('CVE')
data = response.json()
with open(f'CVE//{cve}.json', 'w') as f:
json.dump(data, f, indent=2)
print(f'Successfully fetched and saved {cve} data to {cve}.json')
# python main 函数
if __name__ == "__main__":
# 检查命令行参数的数量
if len(sys.argv) < 2:
print(f"Usage: python {sys.argv[0]} filename")
sys.exit(1)
print(f"读取cve列表文件{sys.argv[1]}")
filename = sys.argv[1]
# 从文件读取 CVE 列表
cve_list = read_CVE_list(filename)
#保存到文件
request_CVE_json(cve_list)