wfp

Crates.iowfp
lib.rswfp
version0.0.3
created_at2025-08-31 14:52:20.249846+00
updated_at2025-09-13 22:44:53.320642+00
descriptionA Rust library for the Windows Filtering Platform (WFP) API
homepage
repositoryhttps://github.com/dlon/wfp-rs
max_upload_size
id1818614
size87,938
David Lönnhager (dlon)

documentation

https://docs.rs/wfp

README

WFP - Windows Filtering Platform Rust library

⚠️ This project is experimental and a work in progress.

A safe Rust library for the Windows Filtering Platform (WFP) API, providing an ergonomic interface for creating and managing network filters on Windows systems.

Adding wfp-rs to your project

Add it to your Cargo.toml: cargo add wfp

Quick start

Here is a simple example adding a sublayer and a blocking rule:

use std::io;
use wfp::{ActionType, FilterBuilder, FilterEngineBuilder, Layer, SubLayerBuilder, Transaction};

fn main() -> io::Result<()> {
    println!("Creating WFP filter engine...");

    let mut engine = FilterEngineBuilder::default().dynamic().open()?;

    std::thread::spawn(move || {
        println!("Starting transaction...");
        let transaction = Transaction::new(&mut engine)?;

        // Create a custom sublayer for organizing our filters
        println!("Adding custom sublayer...");
        SubLayerBuilder::default()
            .name("Example SubLayer")
            .description("Custom sublayer for example filters")
            .weight(100)
            .add(&transaction)?;

        // Create a blocking filter for IPv4 outbound connections
        println!("Adding blocking filter...");
        FilterBuilder::default()
            .name("Example Block Filter")
            .description("Blocks all outbound IPv4 connections on port 80")
            .action(ActionType::Block)
            .layer(Layer::ConnectV4)
            .condition(
                PortConditionBuilder::remote()
                    .equal(80)
                    .build(),
            )
            .add(&transaction)?;

        println!("Committing transaction...");
        transaction.commit()?;

        println!("Filter successfully added!");
        Ok::<(), io::Error>(())
    })
    .join()
    .unwrap()?;

    println!("Example completed successfully!");
    Ok(())
}

See examples for more examples.

License

Licensed under either of

at your option.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Commit count: 10

cargo fmt