C#获取MAC地址包括物理网卡和虚拟网卡
调用:
C# 全选
private string GetMac()
{
var mac = MacHelper.GetDetailedMacAddresses().FirstOrDefault();
if (mac != null && !mac.MacAddress.IsEmpty())
//return mac?.MacAddress?.Replace("-", "").Replace(":", "");
return mac?.MacAddress?.Replace("-", "").Replace(":", "");
else
return string.Empty;
}
C# 全选
using System;
using System.Net.NetworkInformation;
using System.Linq;
using System.Collections.Generic;
namespace CSFrameworkV6.Common
{
public class MacAddressInfo
{
public string MacAddress { get; set; }
public string InterfaceName { get; set; }
public string Description { get; set; }
public NetworkInterfaceType InterfaceType { get; set; }
/// <summary>
/// 是否虚拟网卡
/// </summary>
public bool IsVirtual { get; set; }
}
public class MacHelper
{
/// <summary>
/// 获取所有网卡信息,包括虚拟网卡
/// </summary>
/// <returns></returns>
public static List<MacAddressInfo> GetDetailedMacAddresses()
{
var macAddresses = new List<MacAddressInfo>();
try
{
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in interfaces)
{
PhysicalAddress address = ni.GetPhysicalAddress();
if (address != null && address.GetAddressBytes().Length > 0)
{
string mac = BitConverter.ToString(address.GetAddressBytes()).Replace("-", ":");
bool isVirtual = IsVirtualInterface(ni);
var info = new MacAddressInfo
{
MacAddress = mac,
InterfaceName = ni.Name,
Description = ni.Description,
InterfaceType = ni.NetworkInterfaceType,
IsVirtual = isVirtual
};
macAddresses.Add(info);
string type = isVirtual ? "虚拟网卡" : "物理网卡";
//Console.WriteLine($"{mac} - {ni.Name} - {type}");
}
}
}
catch (Exception ex)
{
//Console.WriteLine($"获取MAC地址时出错: {ex.Message}");
throw;
}
return macAddresses;
}
private static bool IsVirtualInterface(NetworkInterface ni)
{
string description = ni.Description.ToLower();
string name = ni.Name.ToLower();
// 常见的虚拟网卡标识
string[] virtualKeywords = {
"virtual", "hyper-v", "vmware", "virtualbox", "vbox",
"tap-windows", "wireguard", "tunnel", "pseudo"
};
return virtualKeywords.Any(keyword =>
description.Contains(keyword) || name.Contains(keyword));
}
}
}
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网





