我正在尝试以编程方式获取系统的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地址?
答案 0 :(得分:0)
您正在获取Software Loopback Interface 1
的空MAC地址
在尝试运行此代码之前,请确保您具有与网络的活动连接。
主动意味着接口被激活(向上)并连接到具有DHCP给定IP地址或静态接口的网络。
要解决此问题,您只需通过
从查询中删除所有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)
有许多类型的网络适配器没有物理地址,例如tunel
或Loopback
过滤到Ethernet
类型:
where nic.OperationalStatus == OperationalStatus.Up &&
nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet