Archived
41 lines
1.0 KiB
Python
41 lines
1.0 KiB
Python
import json
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
json_path = "wordfence_vulnerabilities.json"
|
|
|
|
def load_cvss_scores(path):
|
|
"""Load JSON data and extract all CVSS scores into a list"""
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
data = json.load(f)
|
|
|
|
scores = []
|
|
for entry in data:
|
|
|
|
if "cvss_score" in entry and isinstance(entry["cvss_score"], (int, float)):
|
|
scores.append(entry["cvss_score"])
|
|
return scores
|
|
|
|
|
|
def plot_hist(scores):
|
|
"""Plot a histogram of CVSS scores"""
|
|
plt.figure(figsize=(8, 5))
|
|
plt.hist(scores, bins=10, edgecolor="black", color="skyblue")
|
|
plt.title("Distribution of CVSS Scores in Vulnerability Data")
|
|
plt.xlabel("CVSS Score")
|
|
plt.ylabel("Number of Vulnerabilities")
|
|
plt.grid(alpha=0.4)
|
|
plt.savefig("cvss_distribution.png")
|
|
plt.show()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
scores = load_cvss_scores(json_path)
|
|
print(f"Loaded {len(scores)} CVSS scores.")
|
|
print("Sample:", scores[:10])
|
|
|
|
if scores:
|
|
plot_hist(scores)
|
|
else:
|
|
print("error")
|