A simple, lightweight ICMP ping library for Rust that supports both IPv4 and IPv6.
- Simple API
- Support for both IPv4 and IPv6
- Synchronous ping operations
- DNS hostname resolution
- Latency measurement in milliseconds
- Packet validation
Add this to your Cargo.toml:
[dependencies]
single-ping = "0.1.1"use single_ping::ping;
fn main() {
// Ping with 1000ms timeout and 32 bytes of data
match ping("8.8.8.8", 1000, 32) {
Ok(result) => {
if result.dropped {
println!("Packet dropped!");
} else {
println!("Ping successful! Latency: {}ms", result.latency_ms);
}
}
Err(e) => eprintln!("Ping failed: {}", e),
}
}use single_ping::ping;
fn main() {
// Ping google.com with 2 second timeout and 56 bytes of data
match ping("google.com", 2000, 56) {
Ok(result) => {
println!("Latency: {}ms", result.latency_ms);
}
Err(e) => eprintln!("Error: {}", e),
}
}use single_ping::ping;
fn main() {
let result = ping("example.com", 1000, 32).unwrap();
if result.dropped {
println!("No response received within timeout period");
} else {
println!("Response received in {}ms", result.latency_ms);
}
}Sends an ICMP echo request to the specified host.
Parameters:
host- Target host as an IP address or hostname (e.g., "8.8.8.8" or "google.com")timeout- Maximum time to wait for a response, in millisecondssize- Size of the data payload in bytes
Returns:
Ok(PingResult)- Contains information about the ping resultErr(_)- If the host cannot be resolved or network errors occur
The result of a ping operation.
Fields:
dropped: bool- Whether the packet was dropped (no response or invalid response)latency_ms: u64- Round-trip time in milliseconds
Creating raw ICMP sockets requires elevated privileges:
Linux/macOS:
sudo cargo runOr set capabilities on the binary:
sudo setcap cap_net_raw+ep target/release/your_binaryWindows: Run your terminal or IDE as Administrator.
- Linux
- macOS
- Windows
- Other Unix-like systems
- DNS Resolution: The library first resolves the hostname to an IP address (or parses it if already an IP)
- Socket Creation: Creates a raw ICMP socket (ICMPv4 or ICMPv6 based on the resolved address)
- Packet Construction: Builds an ICMP Echo Request packet with the specified payload size
- Send & Receive: Sends the packet and waits for an Echo Reply within the timeout period
- Validation: Validates the received packet to ensure it's a proper Echo Reply
- Latency Calculation: Measures the round-trip time from send to receive
Run the examples with elevated privileges:
sudo cargo run --example basic_pingsudo cargo test
socket2- Cross-platform socket operations
Apache-2.0
Contributions are welcome! Please feel free to submit a Pull Request.
You need to run with elevated privileges (see Requirements).
- Check your network connection
- Verify the hostname is correct
- Ensure DNS resolution is working (
pingcommand works)
Some networks may not support IPv6. The library will automatically use IPv4 or IPv6 based on the resolved address.