当我尝试获取MAC地址时,为什么会得到一个空字符串?

时间:2017-06-19 17:53:17

标签: c# mac-address

我正在尝试以编程方式获取系统的MAC地址。我在C#中编写,在Windows 10操作系统上使用Visual Studios .NET框架。我已经包含了System.Net.NetworkInformation命名空间(对于像我这样的其他.NET新手,必须在解决方案资源管理器下的" References"部分中手动添加它,然后使用"使用& #34;关键字)。要获取MAC地址,我使用以下代码:

try
{
    var macAddr =
        (
            from nic in NetworkInterface.GetAllNetworkInterfaces()
            where nic.OperationalStatus == OperationalStatus.Up
            select nic.GetPhysicalAddress().ToString()
        ).FirstOrDefault();
    Console.WriteLine("MAC address is: {0}", macAddr);

}
catch (Exception e)
{
    Console.WriteLine("Could not collect MAC Address;\nERROR: {0}", e);
}

我期待的输出是:

  

试图收集MAC地址......

     

MAC地址是:XXXXXXXXXXXX

其中XXX ....是12个字符的MAC地址,或者:

  

试图收集MAC地址......

     

无法收集MAC地址;

     

错误:[此处插入错误报告]

然而,我得到的是:

  

试图收集MAC地址......

     

MAC地址是:

其中macAddr变量似乎收集了一个空字符串。

所以...我的问题是,为什么我得到一个显然是空的字符串而不是我期待的12个字符的MAC地址?

2 个答案:

答案 0 :(得分:0)

您正在获取Software Loopback Interface 1的空MAC地址 在尝试运行此代码之前,请确保您具有与网络的活动连接。 主动意味着接口被激活(向上)并连接到具有DHCP给定IP地址或静态接口的网络。

Loopback Device

要解决此问题,您只需通过

从查询中删除所有Loopback Interfaces即可
var macAddresses = from nic in NetworkInterface.GetAllNetworkInterfaces()
                   where nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback
                   select nic.GetPhysicalAddress().ToString();

编辑,无论你的网卡OperationalStatus如何,都可以进行检查,只需"问"对于非空MAC地址:

var macAddresses = from nic in NetworkInterface.GetAllNetworkInterfaces()
                   where !string.IsNullOrEmpty(nic.GetPhysicalAddress().ToString())
                   select nic.GetPhysicalAddress().ToString();

答案 1 :(得分:0)

有许多类型的网络适配器没有物理地址,例如tunelLoopback

过滤到Ethernet类型:

where nic.OperationalStatus == OperationalStatus.Up && 
nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet