c# - GetAllNetworkInterfaces 需要一些垃圾

标签 c# .net

我正在使用 NetworkInterface.GetAllNetworkInterfaces() 获取我的网络接口(interface),

然后我尝试获取我的 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 中找不到任何相关信息。

最佳答案

获得所有真实接口(interface)的更清晰的方法是使用WMI。您可以从 Win32_NetworkAdapter 检索所有网络适配器信息类(class)。要确定适配器是物理适配器还是逻辑适配器,需要检查 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() 您无法确定。

关于c# - GetAllNetworkInterfaces 需要一些垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503170/

相关文章:

c# - 可以在 LINQ 中做联合吗?

c# - 如何为库 (dll) 添加 Intellisense 工具提示支持

c# - 将 Context 绑定(bind)到 ListView 不起作用

c# - 如何检查绝对控件可见性以及如何通知绝对可见性的变化

c# - 通用接口(interface)问题

c# - DataGridView , 调整宽度和高度到 DataTable

c# - 必须实现通用的小于和大于操作

.net - 如何在另一个项目中托管一个项目的 WCF 服务?

.net - Azure 服务总线 : Microsoft. Azure.WebJobs.Script.HostDisposeException:主机已处置且无法使用

c# - 如何有选择地验证 WPF 中的表单?