C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#获取电脑网卡MAC地址

C#获取电脑网卡MAC地址的方法详解

作者:加号3

MAC地址是网络接口的物理地址,由48位二进制数组成,通常表示为6组十六进制数,本文将详细介绍在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有线以太网
Wireless80211WiFi无线网卡
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 多网卡环境

笔记本电脑通常同时具有有线和无线网卡,建议:

四、总结

在大多数场景下,推荐使用 NetworkInterface 类获取MAC地址,它简单、可靠且跨平台兼容。

到此这篇关于C#获取电脑网卡MAC地址的方法详解的文章就介绍到这了,更多相关C#获取电脑网卡MAC地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文