C#获取MAC地址包括物理网卡和虚拟网卡|C/S开发框架
作者:csframework|C/S框架网  发布日期:2026/01/01 23:05:39

调用:

C# 全选
    private string GetMac()
    {
        var mac = MacHelper.GetDetailedMacAddresses().FirstOrDefault();
        if (mac != null && !mac.MacAddress.IsEmpty())
            //return mac?.MacAddress?.Replace("-", "").Replace(":", "");
            return mac?.MacAddress?.Replace("-", "").Replace(":", "");
        else
            return string.Empty;
    }

C# 全选
using System;
using System.Net.NetworkInformation;
using System.Linq;
using System.Collections.Generic;

namespace CSFrameworkV6.Common
{


    public class MacAddressInfo
    {
        public string MacAddress { get; set; }
        public string InterfaceName { get; set; }
        public string Description { get; set; }
        public NetworkInterfaceType InterfaceType { get; set; }

        /// <summary>
        /// 是否虚拟网卡
        /// </summary>
        public bool IsVirtual { get; set; }
    }

    public class MacHelper
    {

        /// <summary>
        /// 获取所有网卡信息,包括虚拟网卡
        /// </summary>
        /// <returns></returns>
        public static List<MacAddressInfo> GetDetailedMacAddresses()
        {
            var macAddresses = new List<MacAddressInfo>();

            try
            {
                NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();

                foreach (NetworkInterface ni in interfaces)
                {
                    PhysicalAddress address = ni.GetPhysicalAddress();
                    if (address != null && address.GetAddressBytes().Length > 0)
                    {
                        string mac = BitConverter.ToString(address.GetAddressBytes()).Replace("-", ":");

                        bool isVirtual = IsVirtualInterface(ni);

                        var info = new MacAddressInfo
                        {
                            MacAddress = mac,
                            InterfaceName = ni.Name,
                            Description = ni.Description,
                            InterfaceType = ni.NetworkInterfaceType,
                            IsVirtual = isVirtual
                        };

                        macAddresses.Add(info);

                        string type = isVirtual ? "虚拟网卡" : "物理网卡";
                        //Console.WriteLine($"{mac} - {ni.Name} - {type}");
                    }
                }
            }
            catch (Exception ex)
            {
                //Console.WriteLine($"获取MAC地址时出错: {ex.Message}");
                throw;
            }

            return macAddresses;
        }

        private static bool IsVirtualInterface(NetworkInterface ni)
        {
            string description = ni.Description.ToLower();
            string name = ni.Name.ToLower();

            // 常见的虚拟网卡标识
            string[] virtualKeywords = {
        "virtual", "hyper-v", "vmware", "virtualbox", "vbox",
        "tap-windows", "wireguard", "tunnel", "pseudo"
    };

            return virtualKeywords.Any(keyword =>
                description.Contains(keyword) || name.Contains(keyword));
        }
    }


}

C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
上一篇 下一篇