Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

An execution engine for Wireshark-like filters

License

NotificationsYou must be signed in to change notification settings

cloudflare/wirefilter

Build statusCrates.ioLicense

This is an execution engine forWireshark®-like filters.

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

Example

use wirefilter::{ExecutionContext,Scheme};fnmain() ->Result<(),Box<dyn std::error::Error>>{// Create a map of possible filter fields.let scheme =Scheme!{        http.method:Bytes,        http.ua:Bytes,        port:Int,}.build();// 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.letmut ctx =ExecutionContext::new(&scheme);    ctx.set_field_value(scheme.get_field("http.method").unwrap(),"GET")?;    ctx.set_field_value(        scheme.get_field("http.ua").unwrap(),"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",)?;    ctx.set_field_value(scheme.get_field("port").unwrap(),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(scheme.get_field("port").unwrap(),8080)?;println!("Filter matches: {:?}", filter.execute(&ctx)?);// falseOk(())}

Fuzzing

There are fuzz tests in the fuzz directory.

Install afl:

cargo install afl --force

Buildbytes fuzz test:

cd fuzz/bytescargo afl build

Run fuzz test (from insidefuzz/bytes directory):

cargo afl fuzz -i in -o out ../../target/debug/fuzz-bytes

If you see an error like:

Looks like the target binary is not instrumented!

Try deleting the compiled binary and re-building withcargo afl build.

Licensing

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

Packages

No packages published

Contributors6


[8]ページ先頭

©2009-2025 Movatter.jp