当前位置: 首页 > news >正文

C#环境下MAC地址获取方法解析

在C#中,获取MAC地址并不是直接支持的,因为出于安全和隐私的考虑,操作系统通常会限制对这类硬件信息的直接访问。不过,仍然可以通过一些方法间接地获取到本地网络接口(比如以太网接口)的MAC地址。

以下是几种常用的方法来获取MAC地址:

1. 使用System.Net.NetworkInformation命名空间

可以使用System.Net.NetworkInformation命名空间中的NetworkInterface类来枚举所有网络接口,并找到想要的MAC地址。

using System;
using System.Net.NetworkInformation;class Program
{static void Main(){foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()){// 忽略无MAC地址或网络状态不是UP的接口if (nic.NetworkInterfaceType != NetworkInterfaceType.Ethernet || nic.OperationalStatus != OperationalStatus.Up)continue;// 获取MAC地址PhysicalAddress address = nic.GetPhysicalAddress();byte[] bytes = address.GetAddressBytes();// 将MAC地址转换为更易于阅读的格式string macAddress = BitConverter.ToString(bytes).Replace("-", ":");Console.WriteLine($"Interface: {nic.Name} has MAC address: {macAddress}");}}
}

注意:在上面的代码中只关心以太网接口的MAC地址,并且只显示那些状态为Up的接口。可以根据需要修改这些条件。

2. 使用ManagementObjectSearcher(需要添加System.Management引用)

对于更复杂的查询,或者当需要更多关于网络接口的信息时,可以使用WMI(Windows Management Instrumentation)通过ManagementObjectSearcher来查询MAC地址。

using System;
using System.Management;class Program
{static void Main(){SelectQuery query = new SelectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2");ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);foreach (ManagementObject mo in searcher.Get()){if (mo["MACAddress"] != null){Console.WriteLine($"MAC Address : {mo["MACAddress"]}");}}}
}

注意:这里使用的是Win32_NetworkAdapter的WMI类,并且只选择了那些NetConnectionStatus为2(即已连接)的网络适配器。

注意

  • 获取MAC地址通常需要管理员权限,特别是在Windows Vista及更高版本的Windows系统中。
  • 不同的网络环境(如虚拟机、容器等)可能会显示不同的MAC地址,或者可能无法获取到MAC地址。
  • 出于隐私和安全考虑,请谨慎使用MAC地址,并避免在不必要的情况下公开或存储这些信息。
http://www.lryc.cn/news/438504.html

相关文章:

  • (k8s)Kubernetes 从0到1容器编排之旅
  • Rust Web开发框架对比:Warp与Actix-web
  • F12抓包12:Performance(性能)前端性能分析
  • 数据结构(Day13)
  • 链表的快速排序(C/C++实现)
  • css总结(记录一下...)
  • SpringBoot 处理 @KafkaListener 消息
  • Spring Boot-API版本控制问题
  • Git 提取和拉取的区别在哪
  • 【数据结构与算法 | 每日一题 | 力扣篇】力扣2390, 2848
  • 破解信息架构实施的密码:常见挑战与最佳解决方案全指南
  • CodeChef Starters 151 (Div.2) A~D
  • Redis学习——数据不一致怎么办?更新缓存失败了又怎么办?
  • 跨境电商代购新纪元:一键解锁全球好物,系统流程全揭秘
  • Mac 上终端使用 MySql 记录
  • 461. 汉明距离
  • 开发指南061-nexus权限管理
  • Qt 弹出菜单右键菜单 QMenu 设置不同颜色的子项
  • Git换行符自动转换参数core.autocrlf的用法
  • C语言的结构体类型
  • illustrator 收集字体插件VBscript
  • 【LLM多模态】文生视频评测基准VBench
  • 通过覆写 url_for 将 flask 应用部署到子目录下
  • 攻防世界---->埃尔隆德32
  • redis短信登录模型
  • 【React】React18.2.0核心源码解读
  • 深度学习-目标检测(四)-Faster R-CNN
  • MATLAB中的无线通信系统设计有哪些最佳实践
  • Java的发展史与前景
  • 2024年上海小学生古诗文大会倒计时30多天:做几道今年的官方模拟题