我的计算机上有多个网卡。 (因为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()
”。
答案 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