[−][src]Crate libtraceroute
libtraceroute
libtraceroute
provides a cross-platform API for traceroute using Rust.
Features
libtraceroute
sends and receives packets at a data link layer, which makes it
flexible and highly customisable. The library allows to configure the following parameters:
- Port
- Timeout per query (in ms)
- Maximum number of hops
- Number of queries per hop
- Network interface
- Protocol (UDP, TCP, ICMP)
The library is based on pnet which allows to work at Layer 2 (Data link) without root privileges on MacOS and Windows, but still requires sudo on Linux.
Example
Traceroute with default configuration:
extern crate libtraceroute;
use libtraceroute::Traceroute;
use std::net::Ipv4Addr;
fn main() {
let destination_ip = Ipv4Addr::new(93, 184, 216, 34); // example.com
let traceroute_query = Traceroute::new(destination_ip, Default::default());
for hop in traceroute_query {
print!("{}", hop.ttl);
for query_result in &hop.query_result {
print!(" \t{}ms \t{}\n", query_result.rtt.as_millis(), query_result.addr);
}
}
}
Traceroute with custom configuration:
extern crate libtraceroute;
use libtraceroute::{Traceroute, Config};
use libtraceroute::util::{Protocol, get_available_interfaces};
use std::net::Ipv4Addr;
fn main() {
let destination_ip = Ipv4Addr::new(93, 184, 216, 34); // example.com
let available_interfaces = get_available_interfaces();
let network_interface = match available_interfaces.iter().filter(|i| i.name == "en0").next() {
Some(i) => i.clone(),
None => panic!("no such interface available")
};
let mut traceroute_query = Traceroute::new(destination_ip, Config::default()
.with_port(33480)
.with_max_hops(20)
.with_first_ttl(2)
.with_interface(network_interface)
.with_number_of_queries(2)
.with_protocol(Protocol::UDP)
.with_timeout(1000));
// Calculate all hops upfront
let traceroute_result = traceroute_query.perform_traceroute();
// Iterate over pre-calculated hops vector
for hop in traceroute_result {
print!("{}", hop.ttl);
for query_result in &hop.query_result {
print!(" \t{}ms \t{}\n", query_result.rtt.as_millis(), query_result.addr);
}
}
}
Modules
util | Miscellaneous utilities for for traceroute |
Structs
Config | Traceroute configurations |
Traceroute | Traceroute instance containing destination address and configurations |
TracerouteHop | Single traceroute hop containing TTL and a vector of traceroute query results |
TracerouteQueryResult | Result of a single query execution - IP and RTT |