C# 获取局域网活动网卡 MAC 地址的方法

拾光
拾光
发布时间:2026-10-14 | 1人浏览过
原创

在 Windows 开发环境中,有时需要识别当前网络环境的物理设备身份。本文将演示如何利用 System.Management 命名空间提供的 WMI 接口,准确获取本机正在使用的网络适配器的 MAC 地址。

实现原理

C# 获取 MAC 地址通常依赖于 Windows Management Instrumentation (WMI)。通过查询 Win32_NetworkAdapterConfiguration 类,我们可以获得系统中所有网络配置的详细信息。核心逻辑是遍历这些实例,寻找 IPEnabled 属性为 true 的记录,这代表了当前激活且可用的网络连接。

环境准备

在使用以下代码前,请确保:

  • 项目已添加对 System.Management.dll 的程序集引用。
  • 代码头部包含 using System.Management;。

操作步骤

第 1 步:初始化 WMI 管理类

目的:建立与系统网络配置信息的连接通道。
入口:新建静态方法或工具类。
动作:实例化 ManagementClass,指定类别名为 Win32_NetworkAdapterConfiguration。

第 2 步:获取并遍历实例集合

目的:读取系统中的所有网卡配置数据。
动作:调用 GetInstances() 方法获取 ManagementObjectCollection,并使用 foreach 循环逐一检查。

第 3 步:筛选活跃网卡并提取地址

目的:排除未启用 IP 协议的虚拟或禁用网卡。
动作:判断 mo["IPEnabled"] 的值。若为真,则取出 MacAddress 字段。
参数注意:Windows 返回的 MAC 地址通常以冒号(:)分隔(如 00:1A:2B:3C:4D:5E)。根据需求,可能需要将其替换为连字符(-)或其他格式。

第 4 步:资源释放

目的:防止内存泄漏。
动作:在循环内或 finally 块中调用 mo.Dispose() 释放单个对象的非托管资源。

核心代码实现

以下是完整的获取函数实现,包含必要的注释说明:

/// <summary>
/// 获取本机当前活跃网络连接的 MAC 地址
/// </summary>
/// <returns>格式化后的 MAC 地址字符串</returns>
public static string GetActiveMacAddress()
{
    string macAddr = null;
    
    // 连接到 Win32_NetworkAdapterConfiguration
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();

    foreach (ManagementObject mo in moc)
    {
        // 仅处理启用 IP 的网络适配器
        if (Convert.ToBoolean(mo["IPEnabled"]) == true)
        {
            // 获取原始 MAC 地址
            macAddr = mo["MacAddress"]?.ToString();
            
            // 将冒号分隔符替换为连字符,符合常见显示格式
            if (!string.IsNullOrEmpty(macAddr))
            {
                macAddr = macAddr.Replace(':', '-');
            }
        }
        
        // 释放当前对象资源
        mo.Dispose();
    }

    // 清理管理类
    mc.Dispose();
    return macAddr;
}

运行效果

执行上述代码后,即可在控制台的输出窗口或调试器中看到类似以下的结果,代表当前网卡的物理地址:

注意事项与排错

  • 权限问题:在某些受限的企业域环境中,访问 WMI 可能需要管理员权限。
  • 多网卡场景:上述代码会返回第一个匹配 IPEnabled=true 的网卡地址。如果存在多个活动网卡(如同时连接 WiFi 和网线),通常返回的是默认网关对应的网卡地址。如需特定网卡的地址,需结合 Caption 或 Description 字段进行进一步过滤。

以上就是 C# 获取局域网 MAC 地址的详细教程,更多关于 .NET 网络编程的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表