当多个IP地址分配给PC时,如何获取默认IP地址
问题描述:
当多个IP地址分配给PC时,如果PC是多宿主,如何获得除127.0.0.1环回地址之外的默认IP地址。当多个IP地址分配给PC时,如何获取默认IP地址
以下代码在一台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;
}
答
我认为你的意思是与默认路由的接口。您可以使用GetIpForwardTable函数(快速谷歌显示它可通过p/invoke调用)获取IPv4路由表,并查找0.0.0.0目标路由(在命令行运行route print
以检查路由表的外观)。
答
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());
}
}
}
}
+0
这是一个很好的假设你有一个网卡分配单个IP地址。看起来也很干净。我会鼓励它;) –
什么是该机器的默认IP地址的定义?我会说127.0.0.1,但你可能想要别的东西... PS:你可能想看看这个:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface .aspx –
在这里,我的意思是我们用于局域网/互联网,不包括127.0.0.1环回地址。 – Coder
如果您有两个网络接口,这在服务器机器上非常常见。哪一个是默认的呢?我想指出你的方向,所以你明白没有这样的事情。你应该得到所有的IP地址,并找出你感兴趣的是哪一个。 –