use cve_explorer_pro::{CVEFetcher, ExploitationPathAnalyzer, display_exploitation_analysis};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("💣 CVE Explorer Pro - Exploitation Analysis Example");
let fetcher = CVEFetcher::new(None);
let cve_id = "CVE-2021-34527";
println!("📡 Fetching CVE data for exploitation analysis: {}", cve_id);
match fetcher.fetch_cve(cve_id).await {
Ok(cve) => {
println!("✅ CVE data loaded");
let exploit_analyzer = ExploitationPathAnalyzer;
let exploitation = exploit_analyzer.analyze_exploitation_path(&cve);
display_exploitation_analysis(&cve, &exploitation);
println!("\n📊 EXPLOITATION METRICS:");
println!("Attack Surface Entry Points: {}", exploitation.attack_surface.entry_points.len());
println!("Trust Boundaries: {}", exploitation.attack_surface.trust_boundaries.len());
println!("Privilege Escalation Steps: {}", exploitation.privilege_escalation_chain.len());
println!("Overall Complexity Score: {:.1}", exploitation.exploitation_complexity.overall_score);
println!("Difficulty Level: {:?}", exploitation.exploitation_complexity.difficulty_level);
println!("\n🎯 REQUIRED SKILLS:");
for skill in &exploitation.exploitation_complexity.required_skills {
println!(" • {} ({:?})", skill.skill, skill.proficiency_required);
}
let time = &exploitation.exploitation_complexity.time_estimate;
println!("\n⏱️ TIME ESTIMATES:");
println!(" Minimum: {} hours", time.min_hours);
println!(" Typical: {} hours", time.typical_hours);
println!(" Maximum: {} hours", time.max_hours);
}
Err(e) => {
eprintln!("❌ Error: {}", e);
}
}
Ok(())
}