问题 禁用网络适配器时获取MAC地址?


有什么办法可以在.net中禁用网络适配器时检索MAC地址吗?

提前致谢,


12866
2018-06-30 05:35


起源

你可以发布启用适配器时使用的代码,然后提到禁用适配器时哪些调用不起作用? - James Manning


答案:


无法获取已禁用的适配器的MAC地址:这是因为获取MAC地址需要查询驱动程序,并且未加载已禁用适配器的驱动程序(资源)。

但是,您可以获取当前未连接的适配器的MAC地址。

WMI路由在这里并不好,因为它显示未连接的适配器的MAC地址为空。好消息是 NetworkInterface.GetAllNetworkInterfaces() 路线工作正常:

// using System.Net.NetworkInformation;
var nics = NetworkInterface.GetAllNetworkInterfaces();

// pick your NIC!
var selectedNic = nics.First();

var macAddress = selectedNic.GetPhysicalAddress().ToString();

9
2018-02-02 10:56



以上答案不适用于bcs。返回的网络适配器列表不按任何顺序排列。它读取所有适配器,可以按随机顺序列出。因此,连接和断开的适配器可以具有任何索引。 - Navin Pandit


请参阅此链接。

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.physicaladdress.aspx

此处的示例显示所有接口的物理地址,而不管其操作阶段。 HTH。


1
2018-06-30 08:06



该示例没有获取禁用适配器的mac。 - Ahmed Shamel


您可以使用WMI:

public static string GetMACAddress()
    {
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc = mc.GetInstances();
        string MACAddress=String.Empty;
        foreach(ManagementObject mo in moc)
        {
            if(MACAddress==String.Empty)  // only return MAC Address from first card
            {
                MACAddress= mo["MacAddress"].ToString() ;
            }
            mo.Dispose();
        }

        return MACAddress;
    }

1
2018-06-30 07:22



禁用NIC时,这不适用于Windows 7。有什么理由??? - Dulini Atapattu
它也不适用于Windows XP。我认为这个答案标记为答案太快了。 - bitbonk
如果禁用网络适配器,则无效。 - tmighty
你能来吗?添加一个程序集/名称空间已定义“ManagementClass”类的行。 - Navin Pandit