huginn-net-http 1.7.4

HTTP fingerprinting (p0f-style) analysis for huginn-net
Documentation
use crate::http;
use crate::observable::{ObservableHttpRequest, ObservableHttpResponse};
use huginn_net_db::db_matching_trait::FingerprintDb;
use huginn_net_db::{Database, Label};

pub struct SignatureMatcher<'a> {
    database: &'a Database,
}

impl<'a> SignatureMatcher<'a> {
    pub fn new(database: &'a Database) -> Self {
        Self { database }
    }

    pub fn matching_by_http_request(
        &self,
        signature: &ObservableHttpRequest,
    ) -> Option<(&'a Label, &'a http::Signature, f32)> {
        self.database
            .http_request
            .find_best_match(&signature.matching)
    }

    pub fn matching_by_http_response(
        &self,
        signature: &ObservableHttpResponse,
    ) -> Option<(&'a Label, &'a http::Signature, f32)> {
        self.database
            .http_response
            .find_best_match(&signature.matching)
    }

    pub fn matching_by_user_agent(&self, user_agent: String) -> Option<(&'a str, Option<&'a str>)> {
        for (ua, ua_family) in &self.database.ua_os {
            if user_agent.contains(ua) {
                return Some((ua.as_str(), ua_family.as_ref().map(|s| s.as_str())));
            }
        }
        None
    }
}