wafrift-detect 0.2.13

WAF detection from response headers and body, response fingerprint drift analysis.
Documentation
use wafrift_detect::detect;

type Sample = (&'static str, u16, Vec<(String, String)>);

fn main() {
    let samples: [Sample; 3] = [
        (
            "Cloudflare-like",
            403,
            vec![
                ("cf-ray".to_string(), "7f3c1234-IAD".to_string()),
                ("server".to_string(), "cloudflare".to_string()),
            ],
        ),
        (
            "Akamai-like",
            403,
            vec![
                ("x-akamai-transformed".to_string(), "9 12345".to_string()),
                ("server".to_string(), "akamaighost".to_string()),
            ],
        ),
        (
            "AWS WAF-like",
            403,
            vec![("x-amzn-waf-action".to_string(), "BLOCK".to_string())],
        ),
    ];

    for (label, status, headers) in samples {
        let detected = match detect(status, &headers, b"").first() {
            Some(waf) => format!("{} ({:.0}%)", waf.name, waf.confidence * 100.0),
            None => "Unknown".to_string(),
        };

        println!("{label:14} -> {detected}");
    }
}