### Iterate Over All Network Interfaces in Rust Source: https://github.com/mmastrac/getifaddrs/blob/master/README.md This example demonstrates how to iterate through all network interfaces and print their names, IP addresses, MAC addresses, netmasks, and status flags. It requires the `getifaddrs` crate and uses `InterfaceFlags` for status checks. ```rust use getifaddrs::{getifaddrs, InterfaceFlags}; fn main() -> std::io::Result<()> { for interface in getifaddrs()? { println!("Interface: {}", interface.name); if let Some(ip_addr) = interface.address.ip_addr() { println!(" IP Address: {}", ip_addr); } if let Some(mac_addr) = interface.address.mac_addr() { println!(" MAC Address: {:?}", mac_addr); } if let Some(netmask) = interface.address.netmask() { println!(" Netmask: {}", netmask); } if let Some(associated_address) = interface.address.associated_address() { println!(" Associated Address: {}", associated_address); } println!(" Flags: {:?}", interface.flags); if interface.flags.contains(InterfaceFlags::UP) { println!(" Status: Up"); } else { println!(" Status: Down"); } println!(); } Ok(()) } ``` -------------------------------- ### Collect and Format Network Interface Data in Rust Source: https://github.com/mmastrac/getifaddrs/blob/master/README.md This example collects all network interfaces into an `Interfaces` collection and then iterates through them to print details in a style similar to the `ifconfig` command. It handles IPv4, IPv6, and MAC addresses, along with interface index. Note the conditional compilation for associated addresses on non-Windows systems. ```rust use getifaddrs::{getifaddrs, Address, Interfaces}; let interfaces = getifaddrs().unwrap().collect::(); for (index, interface) in interfaces { println!("{}", interface.name); println!(" Flags: {:?}", interface.flags); for address in interface.address.iter().flatten() { match address { Address::V4(..) | Address::V6(..) => { println!(" IP{:?}: {:?}", address.family(), address.ip_addr().unwrap()); if let Some(netmask) = address.netmask() { println!(" Netmask: {}", netmask); } #[cfg(not(windows))] if let Some(associated_address) = address.associated_address() { println!(" Associated: {}", associated_address); } } Address::Mac(addr) => { println!( " Ether: {}", addr.iter().map(|b| format!("{:02x}", b)).collect::>().join(":") ); } } } println!(" Index: {}", index); println!(); } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.