C# 获取计算机 MAC 的方法

C# 获取计算机 MAC 的方法

软件在上报日志时,通常会带上一些硬件信息,以便于区分设备或用户,计算机物理地址(MAC)便是首当其冲的选择。本文将介绍 .NET/C# 获取计算 MAC 的方法:

  • NetworkInterface
  • WMI (Windows Management Instrumentation)
  • ipconfig/all

NetworkInterface

使用 System.Net.NetworkInformation 命名空间下的 NetworkInterface 可以获取本地计算机上的网络接口对象(网络适配器),然后通过类型过滤来筛选 MAC 。需要注意的是,如果网卡处于禁用状态,将获取不到网卡的 MAC 地址

    public static IList<string> GetMacsByNetworkInterface()
    {
        var macs = new List<string>();

        var interfaces = NetworkInterface.GetAllNetworkInterfaces();
        foreach (var @interface in interfaces)
        {
            var up = @interface.OperationalStatus == OperationalStatus.Up;
            var loopback = @interface.NetworkInterfaceType == NetworkInterfaceType.Loopback;

            if (up && !loopback)
            {
                var address = @interface.GetPhysicalAddress().ToString();

                // insert ":" then remove the last ":"
                var result = Regex.Replace(address, ".{2}", "$0:");
                var mac = result.Remove(result.Length - 1);

                macs.Add(mac);
            }
        }

        return macs;
    }

WMI

添加对 System.Management 的引用,然后使用 WMI (Windows Management Instrumentation) 来获取本地计算机的网络适配器配置。该方法依赖于系统的 WMI 服务,如果该服务未运行,将会获取失败。

public static IList<string> GetMacsByWmi()
{
    var isManagerRunning = false;
    var macs = new List<string>();

    try
    {
        var serviceController = new ServiceController("Winmgmt");
        isManagerRunning = serviceController.Status == ServiceControllerStatus.Running;
    }
    catch
    {
        // do nothing
    }

    if (isManagerRunning)
    {
        var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        var moc = mc.GetInstances();

        foreach (var o in moc)
        {
            var mo = (ManagementObject) o;

            var address = mo["MacAddress"];
            var enabled = (bool) mo["IPEnabled"];

            if (address != null && enabled)
            {
                macs.Add(address.ToString().ToUpper());
            }

            mo.Dispose();
        }
    }

    return macs;
}

ipconfig/all

除了前面的两种方法外,还可以通过在命令行中执行 ipconfig/all 命令来查询。后台调用 cmd.exe 来执行 ipconfig/all 命令,然后从输出中解析 Physical Address 所在行中的 MAC 值。编码非常简单,此处不展示源码,关于如何调用 CMD 执行命令,可参考 C#后台调用CMD执行命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ironyho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值