surge-ping

Crates.io MIT licensed API docs

rust ping libray based on tokio + socket2 + pnet_packet.

Care

Example

```rust use std::time::Duration;

use surge_ping::Pinger;

[tokio::main]

async fn main() -> Result<(), Box> { let mut pinger = Pinger::new("114.114.114.114".parse()?)?; pinger.timeout(Duration::fromsecs(1)); for seqcnt in 0..10 { let (reply, dur) = pinger.ping(seqcnt).await?; println!( "{} bytes from {}: icmpseq={} ttl={:?} time={:?}", reply.size, reply.source, reply.sequence, reply.ttl, dur ); } Ok(()) }

```

You can send ICMP packets with custom interface or set_ttl ```rust pinger.binddevice(Some("eth0".asbytes()))?;

You can rely on ttl to implement the icmp version of the traceroute program.

pinger.set_ttl(20)?; ```

Ping(ICMP)

There are two example programs that you can run on your own. ```shell $ git clone https://github.com/kolapapa/surge-ping.git $ cd surge-ping

$ cargo build --example simple sudo RUSTLOG=info ./target/debug/examples/simple -h www.baidu.com -s 56 INFO simple > Ok((Icmpv4(Icmpv4Packet { source: 110.242.68.4, destination: 10.1.33.227, ttl: 45, icmptype: IcmpType(0), icmp_code: IcmpCode(0), size: 64, identifier: 111, sequence: 0 }), 14.687909ms))

$ cargo build --example cmd sudo ./target/debug/examples/cmd -h www.baidu.com -c 5 PING www.baidu.com (110.242.68.4): 56 data bytes 64 bytes from 110.242.68.4: icmpseq=0 ttl=45 time=12.721 ms 64 bytes from 110.242.68.4: icmpseq=1 ttl=45 time=15.458 ms 64 bytes from 110.242.68.4: icmpseq=2 ttl=45 time=21.048 ms 64 bytes from 110.242.68.4: icmpseq=3 ttl=45 time=18.368 ms 64 bytes from 110.242.68.4: icmp_seq=4 ttl=45 time=19.718 ms

--- www.baidu.com ping statistics --- 5 packets transmitted, 5 packets received, 0.00% packet loss round-trip min/avg/max/stddev = 12.721/17.463/21.048/3.009 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].