1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use nix::ifaddrs;
use std::net::SocketAddr;

pub fn get(port: u16) -> Vec<SocketAddr> {
    let mut r = Vec::new();
    let addrs = ifaddrs::getifaddrs().unwrap();
    for ifaddr in addrs {
        if ifaddr.flags.contains(nix::net::if_::InterfaceFlags::IFF_LOOPBACK) {
            continue;
        }
        if let Some(nix::sys::socket::SockAddr::Inet(addr)) = ifaddr.address {
            let mut addr = addr.to_std();
            addr.set_port(port);
            r.push(addr)
        }
    }
    r
}