2个版本
0.1.1 | 2023年7月27日 |
---|---|
0.1.0 | 2023年7月24日 |
#122 in Windows API
38KB
919 行
这是什么!?
此crate提供了对win32函数GetAdaptersAddresses的Rust接口。
为什么!?
有windows crate。但是函数GetAdaptersAddresses使用起来并不愉快。
- 用户预计需要使用HeapAlloc/HeapFree来管理输出内存。
- 用户预计需要遍历适配器和地址的链表。
- 用户预计需要将*SOCKADDR转换为*SOCKADDR_IN / *SOCKADDR_IN6来解释它。
- 这都是不安全的。
那么它是如何工作的呢!?
结构体AdaptersAddresses
分配并拥有GetAdaptersAddresses()写入的缓冲区。
遍历它会产生Adapter
。
适配器可以通过查询其各种属性进行查询,通常是可迭代的。
示例!
use get_adapters_addresses::*;
fn main() -> Result<()> {
let adapter_addresses =
AdaptersAddresses::try_new(Family::Unspec, *Flags::default().include_gateways())?;
for adapter in &adapter_addresses {
println!("============================================================");
println!("adapter name: {:?}", adapter.adapter_name());
println!("friendly name: {:?}", adapter.friendly_name());
println!("description: {:?}", adapter.description());
println!("interface_type {:?}", adapter.interface_type());
if let Some(physical_address) = adapter.physical_address() {
println!(
"physical_address: {} {{{:X}}}",
physical_address,
physical_address.as_u64()
);
}
println!("status: {:?}", adapter.operational_status());
for addr in adapter.unicast_addresses() {
println!("\tunicast: {:?}", addr);
}
for addr in adapter.multicast_addresses() {
println!("\tmulticast: {:?}", addr);
}
for addr in adapter.anycast_addresses() {
println!("\tanycast: {:?}", addr);
}
for addr in adapter.dns_addresses() {
println!("\tdns: {:?}", addr);
}
for addr in adapter.gateway_addresses() {
println!("\tgateway: {:?}", addr);
}
println!("\tdhcpv4: {:?}", adapter.dhcpv4_address());
println!("\tdhcpv6: {:?}", adapter.dhcpv6_address());
}
Ok(())
}
依赖项
~0.3–12MB
~104K SLoC