如何将多个 IP 地址分配给 PC 时获取默认 IP 地址
本文关键字:IP 地址 PC 获取 默认 分配 | 更新日期: 2023-09-27 18:33:24
当将多个IP地址分配给PC时,即如果PC是多宿主的,如何获得默认IP地址,不包括127.0.0.1环回地址。
以下代码在一台PC上返回正确的默认IP地址,但在另一台PC上返回不正确的IP地址,因此必须有其他解决方案。
private string[] GetDefaultIPWithSubnet()
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
string[] ipSubnet = new string[2];
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"])
{
try
{
string[] ips = (string[])mo["IPAddress"];
string[] subnets = (string[])mo["IPSubnet"];
ipSubnet[0] = ips[0].ToString();
ipSubnet[1] = subnets[0].ToString();
break;
}
catch (Exception ex)
{
return null;
}
}
}
return ipSubnet;
}
public static void GetDefaultIp()
{
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in adapters)
{
if (adapter.OperationalStatus == OperationalStatus.Up && adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{
IPInterfaceProperties properties = adapter.GetIPProperties();
foreach (var x in properties.UnicastAddresses)
{
if (x.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
Console.WriteLine(" IPAddress ........ : {0:x}", x.Address.ToString());
}
}
}
}
我想你的意思是具有默认路由的接口。您可以使用 GetIpForwardTable 函数获取 IPv4 路由表(快速谷歌显示它可以通过 p/invoke 调用)并查找 0.0.0.0 目标路由(在命令行route print
运行以检查路由表的外观)。
我想
你误解了IPEnabled的含义,据我所知,如果在接口上启用了TCP/IP,参数为TRUE。所以我不认为这是你要找的。