概述:从 RedHat 获取 CVE 数据并保存到 json 文件
来源
主要是看到开源的漏扫工具,基本都用了类似的 API 接口来获取漏洞信息。参考 【架构】CVE扫描工具架构收集
其中 cve-bin-tool 用了多个平台的数据
- Redhat
- Open Source Vulnerability Database (OSV)
- Gitlab Advisory Database (GAD),
选哪个平台的数据
我个人只看了 Redhat 平台的获取结果,感觉够用了,并且 Redhat 有一套自己的评分系统。
Redhat
API Documents
Documents
需求描述
从文件读取 CVE 列表,根据 CVE 命从 RedHat 获取相关信息并保存。
实现代码
逻辑比较简单,这里就不赘述了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| 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: api_url = f'https://access.redhat.com/hydra/rest/securitydata/cve.json?ids={cve}'
response = requests.get(api_url)
if response.status_code != 200: print(f'Error: Failed to fetch repositories. Status code: {response.status_code}') continue
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')
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_list = read_CVE_list(filename)
request_CVE_json(cve_list)
|