wirefilter

An execution engine for Wireshark-like filters

Github stars Tracking Chart

Wirefilter

Build status
Crates.io
License

This is an execution engine for Wireshark®-like filters.

It contains public APIs for parsing filter syntax, compiling them into
an executable IR and, finally, executing filters against provided values.

Example

use wirefilter::{ExecutionContext, Scheme, Type};

fn main() -> Result<(), failure::Error> {
    // Create a map of possible filter fields.
    let scheme = Scheme! {
        http.method: Bytes,
        http.ua: Bytes,
        port: Int,
    };

    // Parse a Wireshark-like expression into an AST.
    let ast = scheme.parse(r#"
        http.method != "POST" &&
        not http.ua matches "(googlebot, facebook)" &&
        port in {80 443}
    "#)?;

    println!("Parsed filter representation: {:?}", ast);

    // Compile the AST into an executable filter.
    let filter = ast.compile();

    // Set runtime field values to test the filter against.
    let mut ctx = ExecutionContext::new(&scheme);

    ctx.set_field_value("http.method", "GET")?;

    ctx.set_field_value(
        "http.ua",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
    )?;

    ctx.set_field_value("port", 443)?;

    // Execute the filter with given runtime values.
    println!("Filter matches: {:?}", filter.execute(&ctx)?); // true

    // Amend one of the runtime values and execute the filter again.
    ctx.set_field_value("port", 8080)?;

    println!("Filter matches: {:?}", filter.execute(&ctx)?); // false

    Ok(())
}

Licensing

Licensed under the MIT license. See the LICENSE file for details.

Main metrics

Overview
Name With Ownercloudflare/wirefilter
Primary LanguageRust
Program languageShell (Language Count: 3)
Platform
License:MIT License
所有者活动
Created At2019-02-18 17:40:37
Pushed At2025-05-08 17:24:34
Last Commit At2025-04-16 10:42:35
Release Count3
Last Release Namev0.7.0 (Posted on )
First Release Namev0.6.0 (Posted on )
用户参与
Stargazers Count1k
Watchers Count23
Fork Count98
Commits Count440
Has Issues Enabled
Issues Count22
Issue Open Count7
Pull Requests Count84
Pull Requests Open Count3
Pull Requests Close Count22
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private