C#获取活动NIC IPv4地址

问题描述:

我的电脑上有多个网卡。 (由于VMWare)C#获取活动NIC IPv4地址

如何查找活动卡的IPv4地址。我的意思是,如果我在终端发送ping命令并在WireShark中拦截数据包,我想要“Source”的地址。

我想检查每个网络接口,看看GateWay是否为空或空?或者,也许ping 127.0.0.1并获得ping请求的IP源?但不能实现它。

现在我有这样的代码,我在计算器上

public static string GetLocalIpAddress() 
     { 
      var host = Dns.GetHostEntry(Dns.GetHostName()); 
      return host.AddressList.First(h => h.AddressFamily == AddressFamily.InterNetwork).ToString(); 
     } 

找到,但它让我在VMware卡的IP。但我不知道还有什么“.First()”我可以使用。

,我终于找到了获得真正的有效途径IP。基本上它会查找IPv4中的所有接口,这些接口都是UP和它决定的,它只是将接口与默认网关相连接。

public static string GetLocalIpAddress() 
     { 
      foreach (var netI in NetworkInterface.GetAllNetworkInterfaces()) 
      { 
       if (netI.NetworkInterfaceType != NetworkInterfaceType.Wireless80211 && 
        (netI.NetworkInterfaceType != NetworkInterfaceType.Ethernet || 
        netI.OperationalStatus != OperationalStatus.Up)) continue; 
       foreach (var uniIpAddrInfo in netI.GetIPProperties().UnicastAddresses.Where(x => netI.GetIPProperties().GatewayAddresses.Count > 0)) 
       { 

        if (uniIpAddrInfo.Address.AddressFamily == AddressFamily.InterNetwork && 
         uniIpAddrInfo.AddressPreferredLifetime != uint.MaxValue) 
         return uniIpAddrInfo.Address.ToString(); 
       } 
      } 
      Logger.Log("You local IPv4 address couldn't be found..."); 
      return null; 
     } 

好了,我的朋友,你可以做到以下几点:

var nics = NetworkInterface.GetAllNetworkInterfaces(); 
foreach (var networkInterface in nics) 
{ 
    if (networkInterface.OperationalStatus == OperationalStatus.Up) 
    { 
     var address = networkInterface.GetPhysicalAddress(); 
    } 
} 

地址变量,您可以访问PhysicalAddress目前最多的网络接口

+0

谢谢你的回答。这种类型的实现的问题是,它会让你把所有的内部表面都展现出来。而我的其他卡也上涨了。我已经发布了我终于想出的解决方案 – user3673720

+0

是的,但是您已经在问题的代码示例中选择了第一个。我的解决方案向你展示了所有的接口,你可以选择其中的一个。顺便说一句,你找到了你的答案,那就是重要的 –