26 个版本

0.8.1 2024 年 3 月 6 日
0.8.0 2023 年 3 月 30 日
0.7.4 2022 年 11 月 11 日
0.7.2 2022 年 7 月 21 日
0.2.0 2021 年 3 月 30 日

#136 in 网络编程

Download history 15290/week @ 2024-04-23 11963/week @ 2024-04-30 13514/week @ 2024-05-07 19384/week @ 2024-05-14 13256/week @ 2024-05-21 15455/week @ 2024-05-28 15624/week @ 2024-06-04 15348/week @ 2024-06-11 16422/week @ 2024-06-18 14282/week @ 2024-06-25 16158/week @ 2024-07-02 16396/week @ 2024-07-09 19518/week @ 2024-07-16 20337/week @ 2024-07-23 20898/week @ 2024-07-30 23472/week @ 2024-08-06

86,128 每月下载量
用于 30 个 Crates(10 个直接使用)

MIT 许可证

44KB
991

surge-ping

一个 Ping(ICMP)检测工具,你可以个性化 Ping 参数。自 0.4.0 版本起,增加了一个新的 Client 数据结构。这个结构封装了 socket 实现并可以廉价地在任何任务之间传递。如果你有多个地址要检测,你可以通过只创建一个系统套接字轻松完成(感谢 @wladwm)。

Crates.io MIT licensed API docs

基于 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