8个版本
0.6.0 | 2024年3月24日 |
---|---|
0.5.5 | 2024年1月11日 |
0.5.3 | 2023年11月29日 |
0.5.1 | 2023年7月20日 |
#415 in 网络编程
每月 56 次下载
325KB
4.5K SLoC
NDISAPI
NDISAPI是一个Rust crate,用于与Windows数据包筛选器驱动程序交互。它提供了一个易于使用、安全且高效的接口,以便在网络堆栈的NDIS级别上以最小的网络活动影响高效地筛选(检查和修改)原始网络数据包。
Windows数据包筛选器(WinpkFilter)是一个高性能、轻量级的Windows数据包筛选框架,使开发者能够高效地检查、修改和控制NDIS级别的原始网络数据包。凭借友好的API和针对各种Windows版本的支持,WinpkFilter简化了网络数据包操作,无需内核模式编程知识。
特性
- 枚举网络适配器
- 查询和设置网络适配器属性
- 捕获和分析数据包
- 筛选和修改数据包
- 发送原始数据包
依赖项
- Rust 1.58.0或更高版本
- Windows 7、8、10或11
- Windows数据包筛选器驱动程序已安装
安装
将以下内容添加到您的Cargo.toml
文件中
[dependencies]
ndisapi = "0.6.0"
使用方法
以下是如何枚举网络适配器并打印它们信息的示例
use ndisapi::{MacAddress, Ndisapi};
fn main() {
let ndis = Ndisapi::new("NDISRD").expect("Failed to create NdisApi instance");
let adapters = ndis
.get_tcpip_bound_adapters_info()
.expect("Failed to enumerate adapters");
for adapter in adapters {
println!("Adapter: {:?}", adapter.get_name());
println!(
"Description: {:?}",
Ndisapi::get_friendly_adapter_name(adapter.get_name()).unwrap_or("Unknown".to_string())
);
println!(
"MAC Address: {:?}",
MacAddress::from_slice(adapter.get_hw_address()).unwrap_or_default()
);
println!("-------------------------------");
}
}
有关更多示例和深入使用方法,请参阅文档。
演示
以下是如何运行listadapters
示例的示例
S D:\github.com\ndisapi-rs> cargo run --example listadapters
Finished dev [unoptimized + debuginfo] target(s) in 0.12s
Running `target\debug\examples\listadapters.exe`
Detected Windows Packet Filter version 3.4.8
1. Local Area Connection* 10
\DEVICE\{EDEE8C42-F604-4A7B-BFAA-6B110923217E}
Medium: 0
MAC: 9A:47:3D:60:26:9D
MTU: 1500
FilterFlags: FilterFlags(0x0)
Getting OID_GEN_CURRENT_PACKET_FILTER Error: Data error (cyclic redundancy check).
OID_802_3_CURRENT_ADDRESS: 9A:47:3D:60:26:9D
2. vEthernet (Default Switch)
\DEVICE\{BD64DB34-23DF-45C4-909E-780272A98BAE}
Medium: 0
MAC: 00:15:5D:01:8C:00
MTU: 1500
FilterFlags: FilterFlags(0x0)
OID_GEN_CURRENT_PACKET_FILTER: 0x0000000B
OID_802_3_CURRENT_ADDRESS: 00:15:5D:01:8C:00
...
11. vEthernet (WLAN Virtual Switch)
\DEVICE\{05F9267C-C548-4822-8535-9A57F1A99DB7}
Medium: 0
MAC: 18:47:3D:60:26:9D
MTU: 1500
FilterFlags: FilterFlags(0x0)
OID_GEN_CURRENT_PACKET_FILTER: 0x0000000B
OID_802_3_CURRENT_ADDRESS: 18:47:3D:60:26:9D
System wide MTU decrement: 0
System wide network adapter startup filter mode: 0
Driver intermediate buffer pool size multiplier: 0
Effective intermediate buffer pool size: 2048
以下是对异步-packthru示例的演示。对于此场景,我们将假设vEthernet (WLAN虚拟交换机)
是默认的互联网连接
PS D:\github.com\ndisapi-rs> cargo run --example async-packthru -- --interface-index 11
Finished dev [unoptimized + debuginfo] target(s) in 0.11s
Running `target\debug\examples\async-packthru.exe --interface-index 11`
Detected Windows Packet Filter version 3.4.8
Using interface \DEVICE\{05F9267C-C548-4822-8535-9A57F1A99DB7}
Press ENTER to exit
许可证
本项目的许可证为Apache License 2.0。有关详细信息,请参阅LICENSE。
依赖项
~129MB
~2M SLoC