当前位置:   article > 正文

Python实现使用NVD API获取最新发布且带有CPE信息的漏洞

nvd api

#要通过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()

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号