C#获取MAC地址包括物理网卡和虚拟网卡|C/S开发框架
调用:
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#根据本地IP获取MAC地址(Windows API SendARP函数方式)|C/S开发框架
C#网络工具类NetTools,获取IP/MAC地址|C/S开发框架
C/S客户端软件授权设计方案 | MAC地址白名单+软件到期时间授权|C/S开发框架
.NET C/S架构软件用户授权设计方案(mac地址+白名单用户)|C/S开发框架
达梦数据库 | 获取表结构的SQL脚本|C/S开发框架
C#.NET 达梦数据库存储过程 获取OUT参数返回值|C/S开发框架
CSFrameworkV6旗舰版:获取主菜单、模块菜单、用户有权限的菜单|C/S开发框架
使用EF+Linq或Sql存储过程获取报表数据优缺点分析|C/S开发框架
使用System.Data.OracleClient组件搭建Oracle数据库连接获取DataTable|C/S开发框架
C#.NET反射获取Form窗体中所有的方法Method|C/S开发框架
获取当前方法名称:MethodBase.GetCurrentMethod().Name|C/S开发框架
C#.NET获取每年国家法定节假日清单|C/S开发框架
根据文件扩展名获取图片编码器如jpg/png格式|C/S开发框架
C#地址分析算法,自动获取地址对应的省市区行政区域编码|C/S开发框架
SQL获取数据库中所有用户自定义存储过程、函数、触发器|C/S开发框架
软件自动升级程序AutoUpgrader优化:获取最新升级包|C/S开发框架
C#根据本地IP获取MAC地址(Windows API SendARP函数方式)|C/S开发框架
C#网络工具类NetTools,获取IP/MAC地址|C/S开发框架
C/S客户端软件授权设计方案 | MAC地址白名单+软件到期时间授权|C/S开发框架
.NET C/S架构软件用户授权设计方案(mac地址+白名单用户)|C/S开发框架
达梦数据库 | 获取表结构的SQL脚本|C/S开发框架
C#.NET 达梦数据库存储过程 获取OUT参数返回值|C/S开发框架
CSFrameworkV6旗舰版:获取主菜单、模块菜单、用户有权限的菜单|C/S开发框架
使用EF+Linq或Sql存储过程获取报表数据优缺点分析|C/S开发框架
使用System.Data.OracleClient组件搭建Oracle数据库连接获取DataTable|C/S开发框架
C#.NET反射获取Form窗体中所有的方法Method|C/S开发框架
获取当前方法名称:MethodBase.GetCurrentMethod().Name|C/S开发框架
C#.NET获取每年国家法定节假日清单|C/S开发框架
根据文件扩展名获取图片编码器如jpg/png格式|C/S开发框架
C#地址分析算法,自动获取地址对应的省市区行政区域编码|C/S开发框架
SQL获取数据库中所有用户自定义存储过程、函数、触发器|C/S开发框架
软件自动升级程序AutoUpgrader优化:获取最新升级包|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
