26 个版本
0.8.1 | 2024 年 3 月 6 日 |
---|---|
0.8.0 | 2023 年 3 月 30 日 |
0.7.4 |
|
0.7.2 | 2022 年 7 月 21 日 |
0.2.0 | 2021 年 3 月 30 日 |
#136 in 网络编程
86,128 每月下载量
用于 30 个 Crates(10 个直接使用)
44KB
991 行
surge-ping
一个 Ping(ICMP)检测工具,你可以个性化 Ping 参数。自 0.4.0
版本起,增加了一个新的 Client
数据结构。这个结构封装了 socket
实现并可以廉价地在任何任务之间传递。如果你有多个地址要检测,你可以通过只创建一个系统套接字轻松完成(感谢 @wladwm)。
基于 tokio
+ socket2
+ pnet_packet
的 Rust ping 库。
示例
简单用法
/*
Cargo.toml
[dependencies]
surge-ping = "last version"
tokio = { version = "1.21.2", features = ["full"] }
*/
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload = [0; 8];
let (_packet, duration) = surge_ping::ping("127.0.0.1".parse()?, &payload).await?;
println!("Ping took {:.3?}", duration);
Ok(())
}
多地址用法:multi_ping.rs
Ping(ICMP)
有三个示例程序,你可以在自己的环境中运行。
$ git clone https://github.com/kolapapa/surge-ping.git
$ cd surge-ping
$ cargo run --example simple -- -h 8.8.8.8 -s 56
V4(Icmpv4Packet { source: 8.8.8.8, destination: 10.1.40.79, ttl: 53, icmp_type: IcmpType(0), icmp_code: IcmpCode(0), size: 64, real_dest: 8.8.8.8, identifier: 111, sequence: 0 }) 112.36ms
$ cargo run --example cmd -- -h google.com -c 5
PING google.com (172.217.24.238): 56 data bytes
64 bytes from 172.217.24.238: icmp_seq=0 ttl=115 time=109.902 ms
64 bytes from 172.217.24.238: icmp_seq=1 ttl=115 time=73.684 ms
64 bytes from 172.217.24.238: icmp_seq=2 ttl=115 time=65.865 ms
64 bytes from 172.217.24.238: icmp_seq=3 ttl=115 time=66.328 ms
64 bytes from 172.217.24.238: icmp_seq=4 ttl=115 time=68.707 ms
--- google.com ping statistics ---
5 packets transmitted, 5 packets received, 0.00% packet loss
round-trip min/avg/max/stddev = 65.865/76.897/109.902/16.734 ms
注意
如果你对 时间敏感,请不要使用 异步 ping 程序
,因为如果有大量异步事件等待唤醒,它会导致计算时间不准确。你可以直接使用操作系统的 ping 命令
。
许可证
本项目采用 MIT 许可证。
依赖项
~6–16MB
~192K SLoC