GetAllNetworkInterfaces需要一些垃圾

时间:2011-06-28 07:39:58

标签: c# .net

我正在使用NetworkInterface.GetAllNetworkInterfaces()来接收我的网络接口,

然后我尝试接受我的MAC地址(NetInterf[i].GetPhysicalAddress()

它需要我真实的界面和一些垃圾:

[0]: ""
[1]: "00E018998877"
[2]: "001F3C0B4F5D"      
[3]: ""
[4]: "00000000000000E0"
[5]: "00000000000000E0"
[6]: "00000000000000E0"
[7]: "00000000000000E0"

[1]和[2]我真正的MAC地址,但其他错误, MAC地址必须有6个字节,不是吗?

在程序中我正在使用这样的条件进行过滤

if (NetInterf[i].GetPhysicalAddress().GetAddressBytes().Length == 6)

我做得对吗?因为我在MSDN中找不到任何关于它的信息。

1 个答案:

答案 0 :(得分:3)

获得所有真实界面的更明确方法是使用 WMI 。您可以从Win32_NetworkAdapter类中检索所有网络适配器信息。要确定适配器是物理适配器还是逻辑适配器,需要检查PhysicalAdapter属性。这是一个例子:

var scope = new ManagementScope(@"\\localhost\root\cimv2");
scope.Connect();
var query = new ObjectQuery(@"SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True");
var searcher = new ManagementObjectSearcher(scope, query);

var networkInterfaces = searcher.Get();
foreach (var networkInterface in networkInterfaces)
{
    Console.WriteLine(string.Format("{0} - {1}", networkInterface["MACAddress"], networkInterface["Name"]));
}

使用NetworkInterface.GetAllNetworkInterfaces()无法确定无法确定。