C#获取电脑网卡MAC地址的方法详解
本文将详细介绍在C#中如何获取电脑MAC地址的方法,包含完整代码示例和实际开发中的注意事项。
一、什么是MAC地址
MAC地址(Media Access Control Address)是网络接口的物理地址,由48位二进制数组成,通常表示为6组十六进制数(如 00:1A:2B:3C:4D:5E)。每个网卡出厂时都被分配了全球唯一的MAC地址,常用于设备识别、网络管理和安全认证等场景。
二、推荐方案:使用 NetworkInterface 类
.NET Framework 提供了 System.Net.NetworkInformation 命名空间,这是获取MAC地址最标准、跨平台兼容性最好的方式
2.1 获取电脑可用网卡MAC地址
/// <summary>
/// 获取电脑MAC地址
/// </summary>
/// <returns></returns>
public static List<string> GetMacByWmi()
{
string key = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\";
List<string> macList = new List<string>();
try
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in nics)
{
if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet && adapter.GetPhysicalAddress().ToString().Length != 0)
{
string fRegistryKey = key + adapter.Id + "\\Connection";
RegistryKey rk = Registry.LocalMachine.OpenSubKey(fRegistryKey, false);
if (rk != null)
{
//string fPnpInstanceID = rk.GetValue("PnpInstanceID", "").ToString();
//if (fPnpInstanceID.Length > 3 && fPnpInstanceID.Substring(0, 3) == "PCI")
{
string macAddress = adapter.GetPhysicalAddress().ToString();
for (int i = 1; i < 6; i++)
{
macAddress = macAddress.Insert(3 * i - 1, "-");
}
macList.Add(macAddress);
//break;
}
}
}
}
}
catch (Exception ex)
{
}
return macList;
}
2.2 调试结果

2.3 常见网卡类型枚举
| 类型 | 说明 |
|---|---|
Ethernet | 有线以太网 |
Wireless80211 | WiFi无线网卡 |
Loopback | 本地回环接口 |
Tunnel | 虚拟隧道接口 |
三、常见问题与注意事项
3.1 虚拟网卡过滤
现代电脑常有多个虚拟网卡(VMware、VirtualBox、VPN等),建议过滤掉这些以获取真实物理网卡
// 排除虚拟网卡的关键字
string[] virtualKeywords = {
"virtual", "vmware", "hyper-v", "virtualbox",
"vpn", "tunnel", "tap-windows", "wireguard"
};
3.2 MAC地址格式转换
// 原始格式: 001A2B3C4D5E
string raw = "001A2B3C4D5E";
// 转换为冒号格式: 00:1A:2B:3C:4D:5E
string colon = string.Join(":", Enumerable.Range(0, 6)
.Select(i => raw.Substring(i * 2, 2)));
// 转换为连字符格式: 00-1A-2B-3C-4D-5E
string hyphen = string.Join("-", Enumerable.Range(0, 6)
.Select(i => raw.Substring(i * 2, 2)));
3.3 权限问题
在普通用户权限下通常可以正常获取MAC地址
某些企业环境或安全软件可能限制访问,建议添加异常处理
3.4 多网卡环境
笔记本电脑通常同时具有有线和无线网卡,建议:
- 优先选择 OperationalStatus.Up 的网卡
- 按连接速度排序,选择最快的网卡
- 排除Loopback和虚拟网卡
四、总结
在大多数场景下,推荐使用 NetworkInterface 类获取MAC地址,它简单、可靠且跨平台兼容。
到此这篇关于C#获取电脑网卡MAC地址的方法详解的文章就介绍到这了,更多相关C#获取电脑网卡MAC地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
c# 获取CookieContainer的所有cookies函数代码
这篇文章主要介绍了c# 获取CookieContainer所有cookies的函数代码,需要的朋友可以参考下2013-06-06
c#高效的线程安全队列ConcurrentQueue<T>的实现
这篇文章主要介绍了c#高效的线程安全队列ConcurrentQueue<T>的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-11-11


最新评论