#ping #icmp #tokio

surge-ping

Asynchronous ICMP ping library

26 releases

0.8.1 Mar 6, 2024
0.8.0 Mar 30, 2023
0.7.4 Nov 11, 2022
0.7.2 Jul 21, 2022
0.2.0 Mar 30, 2021

#74 in Network programming

Download history 3195/week @ 2023-11-23 3480/week @ 2023-11-30 5417/week @ 2023-12-07 5644/week @ 2023-12-14 3476/week @ 2023-12-21 4191/week @ 2023-12-28 7393/week @ 2024-01-04 3908/week @ 2024-01-11 5256/week @ 2024-01-18 6749/week @ 2024-01-25 6231/week @ 2024-02-01 8823/week @ 2024-02-08 8186/week @ 2024-02-15 8276/week @ 2024-02-22 14204/week @ 2024-02-29 10088/week @ 2024-03-07

42,338 downloads per month
Used in 20 crates (9 directly)

MIT license

44KB
991 lines

surge-ping

A Ping (ICMP) detection tool, you can personalize the Ping parameters. Since version 0.4.0, a new Client data structure has been added. This structure wraps the socket implementation and can be passed between any task cheaply. If you have multiple addresses to detect, you can easily complete it by creating only one system socket(Thanks @wladwm).

Crates.io MIT licensed API docs

rust ping libray based on tokio + socket2 + pnet_packet.

Example

simple usage:

/*
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 address usage: multi_ping.rs

Ping(ICMP)

There are three example programs that you can run on your own.

$ 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

Notice

If you are time sensitive, please do not use asynchronous ping program, because if there are a large number of asynchronous events waiting to wake up, it will cause inaccurate calculation time. You can directly use the ping command of the operating system.

License

This project is licensed under the MIT license.

Dependencies

~6–18MB
~207K SLoC