【问题标题】:How to get MAC address of the chosen interface and adapter?如何获取所选接口和适配器的 MAC 地址?
【发布时间】:2020-10-06 13:49:18
【问题描述】:

如何获取所选接口和适配器的 MAC 地址?我知道如何从以太网接口获取所有 MAC 地址,但我的目标是从特定适配器获取 MAC 地址。例如,我有 3 个以太网适配器(适配器名称:以太网、以太网 2、VMware),我的目标是获取以太网适配器的 MAC 地址。我尝试过:在 C# 文档中搜索、查看其他堆栈线程以及在其他站点上搜索。我的代码:

        List<string> macs = new List<string>()
        { "000569","000C29","001C14","005056","080027","00155D","080027"};
        foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
        {
            // Only consider Ethernet network interfaces
            if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet &&
                nic.OperationalStatus == OperationalStatus.Up)
            {
                string cllc = nic.GetPhysicalAddress().ToString();
                char[] array = cllc.Substring(0, 6).ToCharArray();

                foreach (char mac in array)
                {
                    if (macs.Contains(mac.ToString()))
                        return true;
                }
            }
        }

【问题讨论】:

  • 您正在迭代的每个 NetworkInterface 对象都应该有一个 Name 属性 (nic.Name)。这些是否与您正在寻找的适配器匹配?
  • @RogerN 是的,其中一些匹配。

标签: c# .net network-interface


【解决方案1】:

我已经更改了代码,现在可以使用了。

List<string> macs = new List<string>()
{ "000569","000C29","001C14","005056","080027","00155D","080027"};
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
        // Only consider Ethernet network interfaces
    if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet && 
        nic.OperationalStatus == OperationalStatus.Up)
    {
        string cllc = nic.GetPhysicalAddress().ToString();
        if (macs.Contains( cllc.Substring(0, 6)))
            return true;
    }
}

我真的不明白为什么您只使用了 MAC 地址的前 6 个字符,但是如果给定列表中存在“向上”以太网的 MAC 地址的前 6 个字符,则上述代码可以正常工作。

【讨论】:

    【解决方案2】:

    如果您想通过适配器名称获取特定适配器的 MAC 地址,则下面的代码可以正常工作。此示例尝试查找名称为“以太网”的适配器。

    string macAddress=NetworkInterface.GetAllNetworkInterfaces()
                     .Where(x => x.Name =="Ethernet")
                     .Select(x => x.GetPhysicalAddress().ToString())
                     .FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 2018-01-26
      • 2011-02-05
      • 1970-01-01
      • 2015-10-07
      • 2023-03-05
      • 2014-01-28
      • 2010-09-18
      • 2014-06-25
      相关资源
      最近更新 更多