赞
踩
#要通过Python实现使用NVD API获取最新发布且带有CPE信息的漏洞,
#使用requests库来发送HTTP请求,并使用json库来解析返回的JSON数据。以下是一个简单的示例代码:
import requests
import json
from datetime import datetime, timedelta
# 打开记录文件# # Open the file in append mode
file = open('myfile.txt', 'a')
# NVD API的URL
NVD_API_URL = "https://services.nvd.nist.gov/rest/json/cves/2.0/"
# 设置时间范围以获取最新发布的漏洞,例如过去7天
days_ago = 30
start_date = (datetime.now() - timedelta(days=days_ago)).strftime('%Y-%m-%dT00:00:00.000')
end_date = datetime.now().strftime('%Y-%m-%dT00:00:00.000')
# 构造API请求参数
params = {
'pubStartDate': start_date,# '2024-02-27T00:00:00.000',#start_date,#'2024-01-01T00:00:00.000',#start_date,#'2024-04-01T00:00:00.000',#start_date,
'pubEndDate': end_date,#'2024-04-27T13:36:00.000',#end_date,# '2024-02-27T00:00:00.000',#end_date,#'2024-04-26T13:36:00.000',
#'resultsPerPage': 10, # 每次请求返回的漏洞数量,可以根据需要调整
'virtualMatchString': 'cpe:2.3:*:*:*:*:*:*:*'
}
file.write("#####################################################]\r")
#Append content to the file
file.write(f"now:{datetime.now()} startDate:{start_date} endDate:{end_date}\r")
# 发送HTTP GET请求
response = requests.get(NVD_API_URL, params=params)
print("reponse:{response.status_code}")
# 检查请求是否成功
if response.status_code == 200:
# 解析返回的JSON数据
cve_data = response.json()
#print(cve_data)
# 提取带有CPE信息的漏洞
print(cve_data['totalResults'])
file.write(f"totalrecords:{cve_data['totalResults']}\r")
for cve_item in cve_data['vulnerabilities']:
cve_id = cve_item['cve']['id']
print(f"CVE ID: {cve_id}")
file.write(f"CVE ID: {cve_id} CVSS: {cve_item['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore']} ")
# 检查是否有CPE信息
#print(cve_item['cve']['configurations'][0]['nodes'])
if 'configurations' in cve_item['cve']:
for configuration_item in cve_item['cve']['configurations']:
for node_item in configuration_item['nodes']:
for cpe_item in node_item['cpeMatch']:
a=1
#print(cpe_item['criteria'])
# 在这里可以进一步处理每个带有CPE信息的漏洞
file.write(f"{cve_item['cve']['configurations'][0]['nodes'][0]['cpeMatch'][0]['criteria']}\r")
#print("---")
else:
print(f"Failed to retrieve data from NVD API. Status code: {response.status_code}")
# Close the file
file.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。