两个MAC地址检索方法返回两个不同的MAC地址

时间:2014-02-11 21:26:04

标签: c# mac-address bootcamp

我目前在Windows 7 Bootcamp上使用两种方法(在Macbook Pro上运行)来检索MAC地址。我目前正在调查在虚拟机上运行我的C#应用​​程序的人员的一些问题,他们无法通过我的MAC地址认证机制进行身份验证。我手边没有VM版本,所以我选择了最接近的选择 - 我的训练营。

第一种方法是根据物理卡连接到PCI接口的事实来检索MAC地址。

public static string returnMAC1()
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select MACAddress, PNPDeviceID FROM Win32_NetworkAdapter WHERE MACAddress IS NOT NULL AND PNPDEVICEID IS NOT NULL");
    ManagementObjectCollection mObject = searcher.Get();

    foreach (ManagementObject obj in mObject)
    {
        string pnp = obj["PNPDeviceID"].ToString();
        if (pnp.Contains("PCI\\"))
        {
            string mac = obj["MACAddress"].ToString();
            mac = mac.Replace(":", string.Empty);
            return mac;
        }
    }
    return "Nothing happened...";
}

第二种方法是MSDN文档中的标准方法:

public static string returnMAC2()
{
    string mac = string.Empty;
    foreach (System.Net.NetworkInformation.NetworkInterface nic in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
    {
        if (nic.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up)
        {
            macAddresses += nic.GetPhysicalAddress().ToString();
            break;
        }
    }
    return mac;
}

使用这两种方法,我得到两个完全不同的结果:

以下是我用两种方法打印的内容:

enter image description here

当我从Network and Sharing Center - >中查看MAC地址时Wireless Network Connection,它对应method 2的结果。

enter image description here

我得到两个完全不同的结果的事实是否与方法#1给我的结果不是无线卡的MAC,而是实际的PCI卡的MAC有关?这似乎是最简单的解释,但可能。

1 个答案:

答案 0 :(得分:3)

看起来我的假设是正确的。

我拿了一个局域网端口(不知道为什么我之前没有这样做)并将其插入MAC。再次运行脚本,这次检查了Local Area Connection的地址,这次它显示了method 1的地址。

经验教训:

  1. 本地连接MAC = / =无线网络连接。无线和LAN适配器使用的MAC地址不同。

  2. 不同的C#MAC地址检索方法从不同的硬件连接中检索MAC地址。在我们的例子中,两种不同的方法可以为您提供相同的结果,从无线端口检索一个MAC,从LAN端口检索一个MAC。