-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvulmon.py
68 lines (53 loc) · 2.29 KB
/
vulmon.py
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
import httpx
from bs4 import BeautifulSoup
from urllib.parse import urljoin
from colorama import init
init(autoreset=True)
def fetch_vulmon_data(cve_code):
url = f"https://vulmon.com/vulnerabilitydetails?qid={cve_code}&sortby=bydate"
data_list = []
try:
response = httpx.get(url, follow_redirects=True, timeout=10)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
def get_element_text(element, default="LOST"):
return element.text.strip() if element else default
title = get_element_text(soup.select_one('h1.ui.header.column.jstitle1'))
cvss_values = [value.text.strip() for value in soup.find_all('span', string=lambda text: text and ('CVSSv' in text))]
description = get_element_text(soup.select_one('p.jsdescription1.content_overview'))
meta = soup.select_one('div.meta')
if meta:
dates = meta.text.strip().split("Updated:")
if len(dates) == 2:
published_date = dates[0].replace("Published:", "").strip()
updated_date = dates[1].strip()
else:
published_date = updated_date = "LOST"
else:
published_date = updated_date = "LOST"
links = [link['href'] for link in soup.select('div.ui.list.ex5 a[href]')]
if not links:
links = ["LOST"]
vulmon_data = [
title,
cvss_values if cvss_values else ["LOST"],
description,
published_date,
updated_date,
links
]
vulmon_cleaned_result = [value if value != "LOST" else "LOST" for value in vulmon_data]
data_list.append(vulmon_cleaned_result)
else:
print(f"Error: Received status code {response.status_code}")
data_list = [["LOST"] * 6]
except httpx.RequestError as e:
print(f"Request error: {e}")
data_list = [["LOST"] * 6]
except httpx.TimeoutException:
print("Error: Request timeout.")
data_list = [["LOST"] * 6]
except Exception as e:
print(f"Unexpected error: {e}")
data_list = [["LOST"] * 6]
return data_list