3 个版本
0.1.2 | 2023 年 1 月 7 日 |
---|---|
0.1.1 | 2023 年 1 月 6 日 |
0.1.0 | 2023 年 1 月 6 日 |
#16 在 #icmp
653 每月下载次数
37KB
736 行
ping-rs
Rust 的 ICMP ping 库。支持 Windows 和 Linux。
请参阅 /bin/simple_ping.rs
中的用法
lib.rs
:
为 Windows 和 Linux 提供 ICMP 回显 (ping) 功能。此库无需 root/admin 权限即可进行 ping 操作。它提供同步和异步 ping 函数: send_ping
和 send_ping_async
。
Linux 版本目前尚不支持 "不要分段" 标志。
使用示例
示例也提供在 /bin/sample_ping.rs
同步 ping
use std::time::Duration;
fn main(){
let addr = "8.8.8.8".parse().unwrap();
let data = [1,2,3,4]; // ping data
let timeout = Duration::from_secs(1);
let options = ping_rs::PingOptions { ttl: 128, dont_fragment: true };
let result = ping_rs::send_ping(&addr, timeout, &data, Some(&options));
match result {
Ok(reply) => println!("Reply from {}: bytes={} time={}ms TTL={}", reply.address, data.len(), reply.rtt, options.ttl),
Err(e) => println!("{:?}", e)
}
}
异步 ping
请注意,此示例中使用了 futures
包。此外,传递给函数的数据必须用 Arc
包装,因为在 Windows 的实现中,此数据的地址将被传递给 Win32 API。
use std::sync::Arc;
use std::time::Duration;
fn main(){
let addr = "8.8.8.8".parse().unwrap();
let data = [1,2,3,4]; // ping data
let data_arc = Arc::new(&data[..]);
let timeout = Duration::from_secs(1);
let options = ping_rs::PingOptions { ttl: 128, dont_fragment: true };
let future = ping_rs::send_ping_async(&addr, timeout, data_arc, Some(&options));
let result = futures::executor::block_on(future);
match result {
Ok(reply) => println!("Reply from {}: bytes={} time={}ms TTL={}", reply.address, data.len(), reply.rtt, options.ttl),
Err(e) => println!("{:?}", e)
}
}
依赖项
~1–42MB
~606K SLoC