C# 获取局域网活动网卡 MAC 地址的方法
在 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 网络编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









