2011-06-28 39 views
3

我使用NetworkInterface.GetAllNetworkInterfaces()把我的网络接口,GetAllNetworkInterfaces需要一些垃圾

然后我试图把我的MAC addreses(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中找不到它。

+0

我认为如果你调用'GetIPProperties',其他接口将与预期的MAC地址不同。http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface。 aspx – Jodrell

+1

NetworkInterfaceType属性为各个接口返回的值是什么? –

+1

@Filip,据我所知,它返回“隧道”的MAC像“00000000000000E0”。 –

回答

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()你不能确定。