C#获取计算机名、IP及MAC地址的实现方法
在C#开发中,经常需要获取本地主机的计算机名、IP地址列表以及网卡的MAC地址。这通常涉及使用System.Net进行网络通信,以及System.Management调用Windows Management Instrumentation (WMI) 服务来读取硬件信息。
实现目标
我们需要编写一个工具类,能够返回以下三种关键信息:
- 计算机名(HostName):当前设备在网络中的名称。
- IP地址列表(IP Addresses):当前主机所有活跃网络接口的IPv4或IPv6地址。
- MAC地址列表(MAC Addresses):已启用IP功能的物理网络接口的物理地址。
环境准备
为了实现上述功能,项目需要引入以下两个核心命名空间:
System.Net:用于处理基本的网络域名解析和主机信息获取。System.Management:用于访问Windows底层的WMI数据,这是获取MAC地址最直接的方式。
操作步骤
第1步:获取计算机名
计算机名可以通过 Dns.GetHostName() 方法直接获取。该方法无需任何参数,返回当前机器配置的净荷机名称。
第2步:获取IP地址列表
要获取本机所有的IP地址,可以使用 Dns.GetHostEntry() 方法传入计算机名,该方法会返回包含多个 IPAddress 对象的数组。遍历该数组并转换为字符串即可得到完整列表。
第3步:获取MAC地址列表
MAC地址属于硬件层信息,需要通过WMI接口查询。具体步骤如下:
- 创建
ManagementClass实例,指定类名为Win32_NetworkAdapterConfiguration,这是描述网络适配器配置的标准WMI类。 - 调用
GetInstances()获取所有适配器的实例集合。 - 遍历每个实例,检查
IPEnabled属性是否为True,以确保只获取当前正在使用的网络连接信息。 - 如果已启用,则读取
MacAddress属性的值并存入结果列表。
完整代码实现
以下是一个完整的C#类示例,封装了上述逻辑。你可以将其添加到你的项目中直接使用。
using System;
using System.Collections.Generic;
using System.Net;
using System.Management;
namespace YourNamespace.NetworkTools
{
/// <summary>
/// 提供获取计算机系统信息的实用方法
/// </summary>
public class SystemInfoManager
{
/// <summary>
/// 获取当前计算机的主机名
/// </summary>
public string GetHostName()
{
return Dns.GetHostName();
}
/// <summary>
/// 获取本机所有的IP地址列表
/// </summary>
public List<string> GetIPAddressList()
{
List<string> ipList = new List<string>();
// 根据主机名获取详细的IP信息
IPAddress[] addressList = Dns.GetHostEntry(GetHostName()).AddressList;
foreach (var ip in addressList)
{
ipList.Add(ip.ToString());
}
return ipList;
}
/// <summary>
/// 获取当前启用IP的网络适配器的MAC地址列表
/// </summary>
public List<string> GetMACAddressList()
{
List<string> macList = new List<string>();
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
// 仅获取已启用IP服务的网络适配器
if ((bool)mo["IPEnabled"])
{
string mac = mo["MacAddress"].ToString();
// 过滤掉空值或非法地址
if (!string.IsNullOrEmpty(mac))
{
macList.Add(mac);
}
}
mo.Dispose();
}
return macList;
}
}
}
完成判断与注意事项
- 权限要求:读取MAC地址通常需要足够的系统权限。如果在某些受限环境下运行,可能会抛出异常或返回空列表。
- 多网卡场景:现代电脑通常拥有Wi-Fi、有线网卡甚至虚拟网卡(如VMware)。上述代码会列出所有状态为“已启用IP”的网卡MAC地址,使用时请注意区分。
- 依赖项:使用
System.Management需要在项目中引用System.Management.dll。如果在Visual Studio中新建项目,通常在“解决方案资源管理器”中右键添加引用找到它;如果是较新的 .NET Core/5+ SDK 项目,可能需要安装System.ManagementNuGet 包。
简要总结
通过结合 Dns 类和 System.Management WMI查询,我们可以轻松地在C#应用中获取计算机的核心网络身份信息。这种方法兼容性较好,适用于大多数基于Windows的开发场景。
以上就是C#获取计算机名、IP及MAC地址的详细实现方法,更多关于C#系统编程的技巧资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









