unix eth0接口列出3次

2cmtqfgy  于 2023-02-08  发布在  Unix
关注(0)|答案(1)|浏览(107)

我在WSL 2上,使用Rust中的nix机箱,并列出网络接口,如下所示:

let ifaces = nix::ifaddrs::getifaddrs().unwrap();

for iface in ifaces {
    println!("{:#?}", iface);
}

当我这样做的时候,它奇怪地列出了三次eth0。一次是netmask为None,一次是broadcast为None。
有人知道为什么它被列出了3次吗?或者是我的WSL配置有问题吗?我希望它只出现一次,就像运行ip show link的结果一样。
我已经提供了下面的3个列表。

InterfaceAddress {
    interface_name: "eth0",
    flags: IFF_UP | IFF_BROADCAST | IFF_RUNNING | IFF_MULTICAST | IFF_LOWER_UP | IFF_NO_PI | IFF_TUN | IFF_TAP,
    address: Some(
        SockaddrStorage {
            ss: sockaddr_storage {
                ss_family: 17,
                __ss_align: 140736544452160,
            },
        },
    ),
    netmask: None,
    broadcast: Some(
        SockaddrStorage {
            ss: sockaddr_storage {
                ss_family: 17,
                __ss_align: 140736544451856,
            },
        },
    ),
    destination: None,
}
InterfaceAddress {
    interface_name: "eth0",
    flags: IFF_UP | IFF_BROADCAST | IFF_RUNNING | IFF_MULTICAST | IFF_LOWER_UP | IFF_NO_PI | IFF_TUN | IFF_TAP,
    address: Some(
        SockaddrStorage {
            ss: sockaddr_storage {
                ss_family: 2,
                __ss_align: 94107083991267,
            },
        },
    ),
    netmask: Some(
        SockaddrStorage {
            ss: sockaddr_storage {
                ss_family: 2,
                __ss_align: 94107084128296,
            },
        },
    ),
    broadcast: Some(
        SockaddrStorage {
            ss: sockaddr_storage {
                ss_family: 2,
                __ss_align: 94107084192256,
            },
        },
    ),
    destination: None,
}
InterfaceAddress {
    interface_name: "eth0",
    flags: IFF_UP | IFF_BROADCAST | IFF_RUNNING | IFF_MULTICAST | IFF_LOWER_UP | IFF_NO_PI | IFF_TUN | IFF_TAP,
    address: Some(
        SockaddrStorage {
            ss: sockaddr_storage {
                ss_family: 10,
                __ss_align: 94107083991267,
            },
        },
    ),
    netmask: Some(
        SockaddrStorage {
            ss: sockaddr_storage {
                ss_family: 10,
                __ss_align: 94107084128296,
            },
        },
    ),
    broadcast: None,
    destination: None,
}
tct7dpnv

tct7dpnv1#

这是正常的。您没有列出接口,而是使用getifaddr 列出接口地址。每个接口可以有多个地址。例如,请参见其中一些接口的ss_family为2,而另一些为10。这是IPv4和v6地址。请与ip -brief a或类似命令的输出进行比较。
您可能需要if_nameindex

相关问题