Skip to content
This repository has been archived by the owner on Jul 20, 2021. It is now read-only.

orf/pinger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pinger

Crates.io Run Tests

This is a small Rust library to execute ping and parse the output across different platforms.

Install

cargo add pinger

Usage

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) => ()
        }
    }
}

Why?

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.