IPHostEntry HostInformation = Dns.GetHostEntry(Dns.GetHostName());
//IPAddress IP = HostInformation.AddressList[0].MapToIPv4();
Console.WriteLine(IP.ToString());
使用上面的代码片段我正在尝试获取运行应用程序的当前用户的IPV4地址,我的网络接口也启用了IPV6。 HostInformation
正在填充V6地址:
FE80 :: D168:1665:65℃:7c2e%12
试图获得:
192.168.0.2
MapToIPV4
返回:
6.92.124.46
拥有:
foreach (var Element in HostInformation.AddressList)
{
Console.WriteLine(Element + "\n\n");
}
显示四个地址:
FE80 :: D168:1665:65℃:7c2e%12
FE80 :: 448:FF7:A313:2477%18
192.168.0.2
2001:0:5ef5:石川铃华:448:FF7:A313:2477
因此,使用该逻辑,HostInformation.AddressList[2];
将包含我的结果。但是,这总是V4地址吗?数组中的第三个元素是否总是存在?总的来说。如何寻找数组来查找V4地址并返回相应的索引?
答案 0 :(得分:1)
根据@ 500-InternalServerError的评论搜索文档后,我开发了这个:
public IPAddress GetIPV4(IPHostEntry HostInformation)
{
IPAddress[] IP = HostInformation.AddressList;
int index = 0;
foreach (IPAddress Address in IP)
{
if (Address.AddressFamily.Equals(AddressFamily.InterNetwork))
{
break;
}
index++;
}
return HostInformation.AddressList[index];
}
由以下人员调用:
IPAddress IP = GetIPV4(Dns.GetHostEntry(Dns.GetHostName()));
测试并使用3台机器,每台机器的接口/地址从1 V4到4地址