我在C#.NET中使用WMI查询使用以下代码检索启用的适配器上的IP地址;
ManagementObjectSearcher NetworkSearcher = new ManagementObjectSearcher("SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
foreach (ManagementObject NetworkObj in NetworkSearcher.Get())
{
String[] arrIPAddress = (String[])(NetworkObj["IPAddress"]);
MessageBox.Show(arrIPAddress[0]);
//sIPAddress = arrIPAddress[0];
}
如果我在消息框中输出arrIPAddress阵列的位置0,我会得到两个单独的消息框,一个接一个,第一个包含第一个NIC的IPv4地址,第二个也是第一个NIC的IPv6地址。 (如果我尝试在阵列中引用1,则分别为第二个NIC获取IPv4和IPv6地址)
我想要实现的是然后只将第一个IPv4地址(显示在第一个消息框中)分配给变量' sIPAddress'但我无法锻炼如何正确分离阵列。我试着看看数组中是否有第二个元素(例如arrIPAddres [0,1]但是没有这样的第二个属性。)
提前感谢任何建议。
答案 0 :(得分:0)
在另一个论坛(链接here)
中,我很友好地回答了这个问题但最终提供我想要的代码如下:
foreach( ManagementObject NetworkObj in NetworkSearcher.Get() )
{
string[] arrIPAddress = (string[])( NetworkObj["IPAddress"] );
sIPAddress = arrIPAddress.FirstOrDefault( s => s.Contains( '.' ) );
if( sIPAddress != null ) break;
}