#manager #gateway #windows #interface #routes

winroute

This crate is a utilities of high level of interface for manipulating and observing Windows's routing table

5 releases

Uses new Rust 2024

0.2.2 Jun 19, 2025
0.2.1 Mar 4, 2025
0.2.0 Feb 14, 2023
0.1.2 Feb 7, 2023
0.1.1 Jan 9, 2023

#174 in Windows APIs

Download history 413/week @ 2025-09-11 412/week @ 2025-09-18 349/week @ 2025-09-25 265/week @ 2025-10-02 166/week @ 2025-10-09 150/week @ 2025-10-16 283/week @ 2025-10-23 155/week @ 2025-10-30 213/week @ 2025-11-06 231/week @ 2025-11-13 160/week @ 2025-11-20 272/week @ 2025-11-27 201/week @ 2025-12-04 292/week @ 2025-12-11 99/week @ 2025-12-18 47/week @ 2025-12-25

725 downloads per month

Apache-2.0

34KB
565 lines

WinRoute

This crate is a utilities of high level of interface for manipulating and observing Windows's routing table

Examples

Manage routing table

let manager = RouteManager::new()?;
let new_route = Route::new("223.6.6.6".parse().unwrap(), 32).metric(1);
// add route
if let Err(e) = manager.add_route(&new_route) {
    eprintln!("{e}");
}
// delete route
if let Err(e) = manager.delete_route(&new_route) {
    eprintln!("{e}");
}

Listen a table change event

let manager = RouteManager::new()?;
let recvier = manager.subscribe_route_change();
let ma = Arc::new(manager);
let mb = ma.clone();

// start a thread to driven event loop, also can use async task to run this
std::thread::spawn(move || loop {
    ma.poll().unwrap();
});

// create a new route
let new_route = Route::new("223.6.6.6".parse().unwrap(), 32);
// add route to system
mb.add_route(&new_route)?;

loop {
    // listeing on route change event
    let event = recvier.recv().unwrap();
    println!("{:?}", event);
}

Features

  • serializable: This feature is enabled by default, it implemented serde's Serialize and Deserialize, this feature requires an additional dependency on serde

Dependencies

~0.3–37MB
~468K SLoC