概述:从 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 获取相关信息并保存。
实现代码
逻辑比较简单,这里就不赘述了。
python
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)