C#获取活动NIC IPv4地址

时间:2017-06-17 18:58:59

标签: c# ip-address

我的计算机上有多个网卡。 (因为VMWare)

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

我想过检查每个网络接口,看看GateWay是空还是空?或者ping 127.0.0.1并获取ping请求的IP源?但无法实现它。

现在我有这个代码,我在StackOverFlow上找到了

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

但它让我获得了VmWare卡的IP。但我不知道我还能用什么“.First()”。

2 个答案:

答案 0 :(得分:1)

我终于找到了获得真实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;
        }

答案 1 :(得分:0)

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

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

地址变量使您可以访问当前Up网络接口的PhysicalAddress