我的 VS2015 VB 应用程序正在读取用户计算机的 MAC 地址。除了一些用户使用带有分配自己的 MAC 地址的扩展坞的笔记本电脑外,这种方法效果很好。我正在使用的代码返回它找到的第一个代码,可以搜索特定的代码吗?
Dim mc As New ManagementClass(New ManagementPath("Win32_Processor"), New ObjectGetOptions(New ManagementNamedValueCollection()))
Dim moc As ManagementObjectCollection = mc.GetInstances()
mc.Path = New ManagementPath("Win32_NetworkAdapterConfiguration")
moc = mc.GetInstances()
Dim sMac As String = String.Empty
For Each mo As ManagementObject In moc
If (mo.GetPropertyValue("IPEnabled") = True) Then
If (sMac = String.Empty) Then
sMac = mo.GetPropertyValue("MacAddress").ToString()
End If
End If
Next
最佳答案
此方法使用 System.Net.NetworkInformation.NetworkInterface而不是直接查询 WMI 接口(interface)。
它返回所有当前网络接口(interface)的信息,除了Loopback interface ,其中Operational Status已启动。这通常会过滤 Teredo 和 ISATAP 接口(interface),当然还有当前不活动的所有网络接口(interface)。
NetworkInterfaceType 还可用于过滤其他特定接口(interface)类型,例如 NetworkInterfaceType.Wireless80211
。
我提议这个变体,因为它在需要时更容易修改/扩展。
NetInterfaceMac
类的每个实例都提供:
- 界面人性化描述
- 接口(interface)的 IPV4 地址
- MAC 地址,如果是字符串格式 (
"BF:D1:E8:8C:2B:A4"
) - MAC 地址字节
Public Class NetInterfaceMac
Public Property InterfaceDescription() As String
Public Property IPAddress() As IPAddress
Public Property MacAddress() As String
Public Property MacAddressBytes() As Byte()
End Class
Public Shared Function GetNetworkMACAddresses() As List(Of NetInterfaceMac)
Dim Macs As New List(Of NetInterfaceMac)()
Dim NetInterfaces As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
Macs.AddRange(NetInterfaces.Where(
Function(ni) ni.NetworkInterfaceType <> NetworkInterfaceType.Loopback AndAlso
ni.OperationalStatus = OperationalStatus.Up).
Select(Function(ni) New NetInterfaceMac() With {
.IPAddress = ni.GetIPProperties().UnicastAddresses?.
Where(Function(ip) ip.IsDnsEligible = True)?.Select(Function(ip) ip.Address).ToArray(),
.InterfaceDescription = ni.Description,
.MacAddress = ni.GetPhysicalAddress().GetAddressBytes().
Select(Function(b) b.ToString("X")).Aggregate(Function(s1, s2) s2 + ":" + s1),
.MacAddressBytes = ni.GetPhysicalAddress().GetAddressBytes()
}))
Return Macs
End Function
调用示例:
Dim Macs As List(Of NetInterfaceMac) = GetNetworkMACAddresses()
关于vb.net - 获取特定MAC地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54024865/