This is a small Rust library to execute ping
and parse the output across different platforms.
cargo add pinger
The ping()
function is the main entrypoint to the library. It returns an asynchronous stream of PingResult
values,
which can be either a Timeout
or a Pong(Duration)
. Below is a simple ping
implementation:
use pinger::{ping, PingResult};
fn main() {
let stream = ping("tomforb.es".to_string()).expect("Error pinging");
for message in stream {
match message {
PingResult::Pong(duration, _) => println!("{:?}", duration),
PingResult::Timeout(_) => println!("Timeout!"),
// Unknown lines, just ignore.
PingResult::Unknown(line) => ()
}
}
}
Sending ICMP messages across platforms is complicated and on some platforms this also requires root access to do.
Executing ping
and parsing the output is a somewhat simple cross-platform way of doing this.