我在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,
}
1条答案
按热度按时间tct7dpnv1#
这是正常的。您没有列出接口,而是使用getifaddr 列出接口地址。每个接口可以有多个地址。例如,请参见其中一些接口的
ss_family
为2,而另一些为10。这是IPv4和v6地址。请与ip -brief a
或类似命令的输出进行比较。您可能需要
if_nameindex
。