问题描述:
获取的MAC地址中可能有虚拟网卡的物理地址
解决方案:
查询MSFT_NetAdapter中属性ConnectorPresent=True 和 Virtual=True的网卡信息
MSFT_NetAdapter中的属性参考地址:
https://docs.microsoft.com/zh-cn/previous-versions/windows/desktop/legacy/hh968170(v=vs.85)
代码:
/// <summary>
/// 取得本机MAC地址
/// </summary>
/// <param name="pFormat">格式,默认横杠</param>
/// <returns></returns>
public static List<string> GetLocalRealMAC()
{
List<string> macAddresses = new List<string>();
try
{
string qry = "SELECT * FROM MSFT_NetAdapter WHERE ConnectorPresent = True And Virtual=False";
ManagementScope scope = new ManagementScope(@"\\.\ROOT\StandardCimv2");
ObjectQuery query = new ObjectQuery(qry);
ManagementObjectSearcher mos = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection moc = mos.Get();
foreach (ManagementObject managementObject in moc)
{
string macAddress = Convert.ToString(managementObject["PermanentAddress"]);
macAddresses.Add(macAddress);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
throw ex;
}
return macAddresses;
}