2011-06-28 38 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()你不能確定。