/rsping

Ping clone written in Rust.

Primary LanguageRustMIT LicenseMIT

rsping

ping clone implemented in Rust.

Usage

Pass the UDP payload as an utf-8 string and the target to ping as arguments. The UDP payload can be empty.

The target can be either an address or an hostname.

Both IPv4 and IPv6 are supported, hostname resolves by default to IPv6 if available.

$ rsping --help
Usage
  ./target/debug/rsping target payload

Running

To run this program you need root permissions or set the necessary capabilities like distro maintainers do for the official ping binary.

The program needs the following capabilities:

CAP_NET_RAW
              •  Use RAW and PACKET sockets;
              •  bind to any address for transparent proxying.

To set binary capabilities:

$ sudo setcap 'cap_net_raw=ep' rsping

Example

Ping google.com with an empty payload.

$ rsping google.com "" 
PING google.com 64 data bytes
64 bytes from 2a00:1450:4003:802::200e: icmp_seq=1 hops=3 time=8.10 ms
64 bytes from 2a00:1450:4003:802::200e: icmp_seq=2 hops=3 time=7.99 ms
28 bytes from 2a00:1450:4003:802::200e: icmp_seq=3 hops=3 time=0.13 ms
64 bytes from 2a00:1450:4003:802::200e: icmp_seq=4 hops=3 time=0.12 ms
64 bytes from 2a00:1450:4003:802::200e: icmp_seq=5 hops=3 time=0.14 ms
64 bytes from 2a00:1450:4003:802::200e: icmp_seq=6 hops=3 time=0.11 ms
64 bytes from 2a00:1450:4003:802::200e: icmp_seq=7 hops=3 time=0.12 ms
32 bytes from 2a00:1450:4003:802::200e: icmp_seq=8 hops=3 time=0.11 ms
64 bytes from 2a00:1450:4003:802::200e: icmp_seq=9 hops=3 time=0.13 ms

Press Ctrl+C at any time to exit.