getaddrs 0.1.0

A safe interface for Unix network interface information
Documentation
  • Coverage
  • 87.5%
    42 out of 48 items documented1 out of 19 items with examples
  • Size
  • Source code size: 15.59 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.92 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • NoraCodes

getaddrs provides a safe interface for the system's network interface data.

The InterfaceAddrs struct provides access to the system's network interface data. You can either iterate over it or consume it and convert it into an InterfaceMap (a HashMap<String, Vec<InterfaceAddr>>) for more convenient access by interface name.

Examples

You can access the basic information of the system in a few lines. The following program prints all the known addresses.

use getaddrs::InterfaceAddrs;

let addrs = InterfaceAddrs::query_system()
    .expect("System has no network interfaces.");

for addr in addrs {
    println!("{}: {:?}", addr.name, addr.address);
}

The InterfaceFlags struct provides access to info about the state of an interface. This program prints the addresses of only interfaces which are up.

use getaddrs::{InterfaceAddrs, if_flags};

let addrs = InterfaceAddrs::query_system()
    .expect("System has no network interfaces.");

for addr in addrs {
    if addr.flags.contains(if_flags::IFF_UP) {
        println!("{}: {:?}", addr.name, addr.address);
    }
}

You can convert the InterfaceAddrs struct into a HashMap easily. InterfaceMap is an alias for HashMap<String, Vec> for easier reference.

use getaddrs::{InterfaceAddrs, InterfaceAddr, InterfaceMap};
use std::collections::HashMap;

let interfaces: InterfaceMap = 
    InterfaceAddrs::query_system()
    .expect("System has no network interfaces.")
    .into(); // Convert to a hash map

// Print all the addresses of the loopback interface
if let Some(addrs) = interfaces.get("lo") {
   println!("Loopback addresses:");
   for addr in addrs {
        println!("\t{:?}", addr);
   }
}