当前位置: 代码网 > it编程>编程语言>Asp.net > C#获取电脑网卡MAC地址的方法详解

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

2026年04月22日 Asp.net 我要评论
本文将详细介绍在c#中如何获取电脑mac地址的方法,包含完整代码示例和实际开发中的注意事项。一、什么是mac地址mac地址(media access control address)是网络接口的物理地

本文将详细介绍在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 多网卡环境

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

  • 优先选择 operationalstatus.up 的网卡
  • 按连接速度排序,选择最快的网卡
  • 排除loopback和虚拟网卡

四、总结

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

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com