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目前最多的网络接口
谢谢你的回答。这种类型的实现的问题是,它会让你把所有的内部表面都展现出来。而我的其他卡也上涨了。我已经发布了我终于想出的解决方案 – user3673720
是的,但是您已经在问题的代码示例中选择了第一个。我的解决方案向你展示了所有的接口,你可以选择其中的一个。顺便说一句,你找到了你的答案,那就是重要的 –