c# - 两种 MAC 地址检索方法返回两个不同的 MAC 地址

标签 c# mac-address bootcamp

我目前在 Windows 7 Bootcamp(在 Macbook Pro 上运行)上使用两种方法来检索 MAC 地址。我目前正在调查人们在虚拟机上运行我的 C# 编写的应用程序时遇到的一些问题,他们无法通过我的 MAC 地址身份验证机制进行身份验证。我手头没有虚拟机构建,因此我选择了最接近的替代方案 - 我的训练营。

第一种方法基于物理卡连接到 PCI 接口(interface)的事实来检索 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

当我从网络和共享中心 -> 无线网络连接查看MAC地址时,它对应于方法2的结果。

enter image description here

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

最佳答案

看来我的假设是正确的。

我拿了一个 LAN 端口(不知道为什么我不早点这样做)并将其插入 MAC。再次运行脚本,这次检查了本地连接的地址,这次显示了方法1的地址。

经验教训:

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

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

关于c# - 两种 MAC 地址检索方法返回两个不同的 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713371/

相关文章:

linux - 在 Linux 2.6.21 (glibc 2.3.5) 上执行 ARP 和反向 ARP

windows-phone-8 - MacBook Pro (2013) 上的 Windows Phone 模拟器

c# - 将音频信号从内存流分别拆分为帧。字节数组 [C#]

javascript - 如何在 Javascript 中将 mac 地址转换为 long?

java - 在java中查找给定IP地址或MAC地址的计算机名称、操作系统名称

macos - 如何设置 OS X 终端默认主页?

ios - 2010 年 10 月的 Macbook Airs 是否足以运行所有工具来开发 iPhone 应用程序?

c# - 为什么我不应该*覆盖 GetHashCode()?

c# - 找不到“用户密码凭据”

c# - 在条件语句中使用 null 条件运算符时,如何处理 null 情况?