Function local_ip_address::linux::list_afinet_netifas

source ·
pub fn list_afinet_netifas() -> Result<Vec<(String, IpAddr)>, Error>
Expand description

Perform a search over the system’s network interfaces using Netlink Route information, retrieved network interfaces belonging to both socket address families AF_INET and AF_INET6 are retrieved along with the interface address name.

§Example

use std::net::IpAddr;
use local_ip_address::list_afinet_netifas;

let ifas = list_afinet_netifas().unwrap();

if let Some((_, ipaddr)) = ifas
.iter()
.find(|(name, ipaddr)| *name == "en0" && matches!(ipaddr, IpAddr::V4(_))) {
    // This is your local IP address: 192.168.1.111
    println!("This is your local IP address: {:?}", ipaddr);
}
Examples found in repository?
examples/show_ip_and_ifs.rs (line 24)
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
fn main() {
    match local_ip() {
        Ok(ip) => println!("Local IPv4: {}", ip),
        Err(err) => println!("Failed to get local IPv4: {}", err),
    };

    match local_ipv6() {
        Ok(ip) => println!("Local IPv6: {}", ip),
        Err(err) => println!("Failed to get local IPv6: {}", err),
    };

    // this is only supported on linux currently
    #[cfg(target_os = "linux")]
    match local_broadcast_ip() {
        Ok(ip) => println!("Local broadcast IPv4: {}", ip),
        Err(err) => println!("Failed to get local broadcast IPv4: {}", err),
    };

    match list_afinet_netifas() {
        Ok(netifs) => {
            println!("Got {} interfaces", netifs.len());
            for netif in netifs {
                println!("IF: {}, IP: {}", netif.0, netif.1);
            }
        }
        Err(err) => println!("Failed to get list of network interfaces: {}", err),
    };
}