C#获取计算机名、IP及MAC地址的实现方法

何川
何川
发布时间:2026-10-14| 5人浏览过
原创

在C#开发中,经常需要获取本地主机的计算机名、IP地址列表以及网卡的MAC地址。这通常涉及使用System.Net进行网络通信,以及System.Management调用Windows Management Instrumentation (WMI) 服务来读取硬件信息。

实现目标

我们需要编写一个工具类,能够返回以下三种关键信息:

  1. 计算机名(HostName):当前设备在网络中的名称。
  2. IP地址列表(IP Addresses):当前主机所有活跃网络接口的IPv4或IPv6地址。
  3. MAC地址列表(MAC Addresses):已启用IP功能的物理网络接口的物理地址。

环境准备

为了实现上述功能,项目需要引入以下两个核心命名空间:

  • System.Net:用于处理基本的网络域名解析和主机信息获取。
  • System.Management:用于访问Windows底层的WMI数据,这是获取MAC地址最直接的方式。

操作步骤

第1步:获取计算机名

计算机名可以通过 Dns.GetHostName() 方法直接获取。该方法无需任何参数,返回当前机器配置的净荷机名称。

第2步:获取IP地址列表

要获取本机所有的IP地址,可以使用 Dns.GetHostEntry() 方法传入计算机名,该方法会返回包含多个 IPAddress 对象的数组。遍历该数组并转换为字符串即可得到完整列表。

第3步:获取MAC地址列表

MAC地址属于硬件层信息,需要通过WMI接口查询。具体步骤如下:

  1. 创建 ManagementClass 实例,指定类名为 Win32_NetworkAdapterConfiguration,这是描述网络适配器配置的标准WMI类。
  2. 调用 GetInstances() 获取所有适配器的实例集合。
  3. 遍历每个实例,检查 IPEnabled 属性是否为 True,以确保只获取当前正在使用的网络连接信息。
  4. 如果已启用,则读取 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.Management NuGet 包。

简要总结

通过结合 Dns 类和 System.Management WMI查询,我们可以轻松地在C#应用中获取计算机的核心网络身份信息。这种方法兼容性较好,适用于大多数基于Windows的开发场景。

以上就是C#获取计算机名、IP及MAC地址的详细实现方法,更多关于C#系统编程的技巧资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。