【问题标题】:Get Specific MAC Address获取特定 MAC 地址
【发布时间】:2019-05-30 04:40:19
【问题描述】:

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

【问题讨论】:

  • 您是否尝试输出 ServiceName 以确定笔记本电脑和扩展坞 (mo.GetPropertyValue("ServiceName")) 之间的差异?
  • 我尝试捕获相关服务,在不了解每个设备的情况下无法确定笔记本电脑和扩展坞之间的区别。

标签: vb.net wmi mac-address


【解决方案1】:

这个方法是使用System.Net.NetworkInformation.NetworkInterface,而不是直接查询WMI接口。

它返回所有当前网络接口的信息,除了Loopback interface,其中Operational Status 是UP。这通常会过滤 Teredo 和 ISATAP 接口,当然还有所有当前不活动的网络接口。

NetworkInterfaceType 也可用于过滤其他特定的接口类型,例如 NetworkInterfaceType.Wireless80211

我提出这个变体是因为它在需要时更容易修改/扩展。

NetInterfaceMac 类的每个实例都提供:

  • 界面人性化描述
  • 接口的 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多