当将多个IP地址分配给PC时,如果PC是多宿主,如何获得除127.0.0.1环回地址之外的默认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;
}
答案 0 :(得分:4)
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());
}
}
}
}
答案 1 :(得分:3)
我认为你的意思是默认路由的界面。您可以使用GetIpForwardTable函数获取IPv4路由表(快速谷歌显示它可通过p / invoke调用)并查找0.0.0.0目标路由(在命令行运行route print
以查看路线表看起来像)。
答案 2 :(得分:0)
我认为您误解了IPEnabled的含义,as far as I know如果接口上启用了TCP / IP,则该参数为TRUE。所以我认为这不是你想要的。