vb.net - 获取特定MAC地址

标签 vb.net wmi mac-address

我的 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/

相关文章:

vb.net - 在vb.net中获取垂直滚动条位置作为整数

iis - IIS在Powershell中启用HTTP保持事件状态

mysql - Update Select SQL Query 是否内置了 Queuing 功能?

.NET EPPlus OpenXml - 在每个页面上重复 Excel 行

vb.net组合键

c# - WMI:在插入时获取 USB 设备描述

winapi - 在没有 WMI 的情况下获取完整的 CPU 名称

android - 为什么 Android 没有 3g 的 mac 地址,而 iOS 有?

c - 在 C 中找出 Linux 和 FreeBSD 上的 MAC 地址

flutter - 如何使用 flutter 扫描本地网络上的所有设备