blob: 46035c737a61dc357c146edcbf9e5383325c6095 (
plain) (
blame)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
"""Advanced query examples for nvdb-py."""
import asyncio
from datetime import datetime, timedelta
from nvd import NVDClient
async def main() -> None:
"""Run advanced examples."""
async with NVDClient() as client:
print("=" * 80)
print("Example 1: CVEs in CISA KEV catalog with HIGH severity")
print("=" * 80)
count = 0
async for cve in client.cve.search_cves(
has_kev=True, cvss_v3_severity="HIGH"
):
print(f"{cve.id} - Score: {cve.cvss_v3_score}")
count += 1
if count >= 5:
break
print(f"Showing {count} results\n")
print("=" * 80)
print("Example 2: CVEs for specific CPE (Apache Log4j)")
print("=" * 80)
count = 0
async for cve in client.cve.search_cves(
cpe_name="cpe:2.3:a:apache:log4j:2.14.1:*:*:*:*:*:*:*"
):
print(f"{cve.id}: {cve.description[:100]}...")
count += 1
if count >= 5:
break
print(f"Showing {count} results\n")
print("=" * 80)
print("Example 3: Recent CVEs (last 30 days)")
print("=" * 80)
# Calculate date range
end_date = datetime.utcnow()
start_date = end_date - timedelta(days=30)
# Format for NVD API
start_str = start_date.strftime("%Y-%m-%dT%H:%M:%S.000")
end_str = end_date.strftime("%Y-%m-%dT%H:%M:%S.000")
count = 0
async for cve in client.cve.search_cves(
pub_start_date=start_str, pub_end_date=end_str
):
print(f"{cve.id} - Published: {cve.published.date()}")
count += 1
if count >= 10:
break
print(f"Showing {count} results\n")
print("=" * 80)
print("Example 4: CVEs with specific CWE (Cross-Site Scripting)")
print("=" * 80)
count = 0
async for cve in client.cve.search_cves(cwe_id="CWE-79"):
print(f"{cve.id}: {cve.description[:100]}...")
count += 1
if count >= 5:
break
print(f"Showing {count} results\n")
print("=" * 80)
print("Example 5: CPE match criteria for a CVE")
print("=" * 80)
matches = await client.cpematch.get_cve_match_criteria("CVE-2021-44228")
print(f"Found {len(matches)} match criteria for CVE-2021-44228")
for match in matches[:5]:
print(f" {match.criteria}")
if match.versionEndExcluding:
print(f" Versions: < {match.versionEndExcluding}")
print()
print("=" * 80)
print("Example 6: Search with multiple filters")
print("=" * 80)
count = 0
async for cve in client.cve.search_cves(
keyword="remote",
cvss_v3_severity="CRITICAL",
has_cert_alerts=True,
):
print(
f"{cve.id} - Score: {cve.cvss_v3_score} - {cve.description[:80]}..."
)
count += 1
if count >= 5:
break
print(f"Showing {count} results\n")
print("=" * 80)
print("Example 7: List data sources")
print("=" * 80)
count = 0
async for source in client.source.list_sources():
print(f"{source.name}")
print(f" Contact: {source.contactEmail}")
print(f" Identifiers: {', '.join(source.sourceIdentifiers[:3])}")
count += 1
if count >= 5:
break
print(f"Showing {count} results\n")
if __name__ == "__main__":
asyncio.run(main())
|