获取以太网卡的MAC地址(附源代码)
- 格式:docx
- 大小:18.76 KB
- 文档页数:2
c++获取网卡MA C地址第一种方法使用Micr osoft的Netb ios API。
这是一套通过Winso ck提供底层网络支持的命令。
使用Netb ios 的最大缺点是您必须在系统中安装了N etbio s服务(如果您在wi ndows网络中启用了文件共享的话,这就不是问题了)。
除此此外,这种方法又快又准确。
Netbio s API只包括了一个函数,就叫做Net bios。
这个函数使用网络控制块(networ k contro l block)结构作为参数,这个结构告诉函数要做什么。
结构的定义如下:typede f struct _NCB {UCHARncb_co mmand;UCHARncb_re tcode;UCHARncb_ls n;UCHARncb_nu m;PUCHAR ncb_bu ffer;WORD ncb_le ngth;UCHARncb_ca llnam e[NCBNAM SZ];UCHARncb_na me[NCBNAM SZ];UCHARncb_rt o;UCHARncb_st o;void (CALLBA CK *ncb_po st) (struct _NCB *);UCHARncb_la na_nu m;UCHARncb_cm d_cpl t;#ifdef_WIN64UCHARncb_re serve[18];#elseUCHARncb_re serve[10];#endifHANDLE ncb_ev ent;} NCB, *PNCB;重点在于nc b_com mand成员。
这个成员告诉Netbi os该作什么。
我们使用三个命令来探测MAC地址。
他们在MSD N的定义如下:命令描述:NCBENU M Window s NT/2000: 列举系统中网卡的数量。
电脑上网卡MAC地址查看方法在计算机网络中,每个网卡都有一种唯一的标识符,称为MAC地址(Media Access Control Address),它由12个十六进制数字组成,通常以“冒号”或“短划线”分隔为六个组。
MAC地址是一个网卡在工厂生产时分配的,无法更改的硬件地址。
在Windows、Mac和Linux等操作系统中,我们可以通过不同的方法来查看电脑上网卡的MAC地址。
下面将介绍Windows、Mac和Linux操作系统中查看MAC地址的方法。
在Windows操作系统中,有几种方法可以查看MAC地址:方法一:使用命令提示符(CMD)1.打开“开始”菜单,点击“运行”。
2. 输入“cmd”并按下回车键,打开命令提示符窗口。
3. 在命令提示符窗口中,输入“ipconfig /all”命令并按下回车键。
方法二:使用控制面板1.打开“开始”菜单,并点击“控制面板”。
2. 在控制面板窗口中,选择“网络和Internet”。
3. 在“网络和Internet”窗口中,点击“网络和共享中心”。
4.在“网络和共享中心”窗口中,点击左侧的“更改适配器设置”。
5.在“更改适配器设置”窗口中,找到你所使用的网络适配器,右键点击,并选择“状态”。
6.在网络适配器状态窗口中,点击“详细信息”按钮。
在Mac操作系统中,可以通过以下方法查看MAC地址:方法一:使用“系统偏好设置”1.点击屏幕左上角的苹果图标,选择“系统偏好设置”。
2.在“系统偏好设置”窗口中,点击“网络”。
3.在网络设置窗口中,选择你所使用的网络连接方式(如Wi-Fi)。
方法二:使用“终端”命令行1. 打开“Launchpad”(即启动台),选择“其他”文件夹。
2.打开“终端”应用程序。
3. 在终端窗口中,输入“ifconfig ,grep 'ether'”命令,并按下回车键。
4. 在命令输出中,可以找到以“ether”开头的行,紧跟着的就是你的MAC地址。
查看mac地址的方法
要查看MAC地址,可以按照以下步骤进行操作:
1. 在Mac电脑上,点击屏幕左上角的"苹果"图标。
2. 从下拉菜单中选择“系统偏好设置”。
3. 在系统偏好设置窗口中,找到并点击“网络”选项。
4. 在网络设置窗口左侧的列表中,选择你当前正在使用的网络类型(Wi-Fi、以太网等)。
5. 在右侧窗口中,点击“高级”按钮。
6. 在弹出的高级设置窗口中,选择“硬件”标签。
7. 在“硬件地址”一栏中,就是你的MAC地址。
这个地址通常由十六进制数表示,由六个双字节组成,每个双字节用两个冒号(:)分隔。
例如,00:11:22:33:44:55。
JAVA实现获取MAC地址获取MAC地址是通过Java程序来获取设备的物理地址,MAC地址是网卡的唯一标识符,用于在网络中唯一地标识一个设备。
Java中获取MAC地址的实现方式有多种,下面将介绍几种常用的方式:1. 使用InetAddress类和NetworkInterface类```javapublic class GetMacAddresspublic static void main(String[] args)tryInetAddress ipAddress = InetAddress.getLocalHost(;NetworkInterface networkInterface =NetworkInterface.getByInetAddress(ipAddress);byte[] macAddressBytes =networkInterface.getHardwareAddress(;StringBuilder macAddressBuilder = new StringBuilder(;for (int i = 0; i < macAddressBytes.length; i++)macAddressBuilder.append(String.format("%02X%s", macAddressBytes[i], (i < macAddressBytes.length - 1) ? "-" : ""));}String macAddress = macAddressBuilder.toString(;System.out.println("MAC Address: " + macAddress);} catch (UnknownHostException , SocketException e)e.printStackTrace(;}}```这种方法通过获取本机的InetAddress对象,然后通过该对象获取对应的NetworkInterface对象,再通过该对象获取硬件地址(MAC地址),最后将硬件地址格式化成常见的xx-xx-xx-xx-xx-xx形式。
如何查看电脑网卡的MAC地址电脑网卡的MAC地址是硬件设备的唯一标识符,用于在局域网中识别和连接设备。
在一些情况下,您可能需要查看电脑的网卡MAC地址,以便进行网络配置或故障排除。
在本文中,我们将介绍几种不同的方法来查看电脑网卡的MAC地址。
1. 使用命令提示符(Windows)-打开“命令提示符”应用程序。
您可以在开始菜单中“命令提示符”。
- 输入“ipconfig /all”并按下回车键。
此命令将显示计算机上的所有网络适配器的详细信息。
-查找以太网适配器或无线局域网适配器的“物理地址”项。
该项旁边的数值就是MAC地址。
2. 使用PowerShell(Windows)- 打开“PowerShell”应用程序。
您可以在开始菜单中“PowerShell”。
- 输入“Get-NetAdapter”并按下回车键。
这会显示计算机上的所有网络适配器的列表。
- 查找以太网适配器或无线局域网适配器的“MacAddress”项。
该项的值是MAC地址。
3. 使用系统偏好设置(Mac)-点击屏幕上方的“苹果”图标,并选择“系统偏好设置”。
-在系统偏好设置窗口中,点击“网络”。
-在网络设置窗口中,选择左侧的网络适配器(例如以太网或Wi-Fi)。
-点击右侧的“高级”按钮。
-在高级设置窗口的“硬件”选项卡中,您可以找到“MAC地址”。
该项的数值就是MAC地址。
4. 使用ifconfig命令(Linux)- 打开终端应用程序。
在大多数Linux发行版中,您可以在应用菜单中找到终端。
- 输入“ifconfig”并按下回车键。
该命令会显示所有网络接口的详细信息。
- 查找以太网适配器或无线局域网适配器的“HWaddr”项。
该项后的数值就是MAC地址。
5. 使用ip命令(Linux)-打开终端应用程序。
- 输入“ip link show”并按下回车键。
该命令将显示计算机上的所有网络接口的信息。
- 查找以太网适配器或无线局域网适配器的“link/ether”项。
各操作系统查询网卡MAC地址方法MAC地址是网卡的物理地址,例如:00-19-21-C4-BA-DB。
MAC地址就是网卡的身份证号码,具有全球唯一性。
Windows XP系统查询MAC地址方法:点击桌面左下角的“开始”按钮——“运行”——输入cmd后点击“确定”(如图1)弹出一个窗口,输入ipconfig/all,然后回车(如图2)。
有线网卡MAC:“Ethernet adapter 本地连接”中的“Physical Address”,Physical Address后面的内容就是有线网卡的MAC地址,例如图2中的MAC地址是00-19-21-C4-BA-DB;无线网卡MAC:“Ethernet adapter无线网络连接”中的“Physical Address”,Physical Address后面的内容就是无线网卡的MAC地址。
图1图2Windows VISTA、Windows 7系统查询MAC地址方法:点击桌面左下角的“开始”按钮——在“所有程序”下有一个文本框,在里面输入cmd,然后按回车键打开一个窗口,在此窗口中输入ipconfig/all,按回车键,找到“以太网适配器本地连接”中的“物理地址”,物理地址后面是有线网卡的MAC地址;找到“无线局域网适配器无线网络连接”中的“物理地址”,物理地址后面就是无线网卡的MAC地址。
苹果系统查询MAC地址方法点击桌面左上角的“苹果”图标,选择“系统偏好设置”,这时会打开一个窗口,点击“网络”,在打开的窗口中点击“以太网”——“高级”——“以太网”,找到“以太网ID”,以太网ID后面的内容就是有线网卡的MAC地址。
点击取消回到之前的窗口,点击“Airport”——“高级”——“AirPort ID”,AirPort ID后面就是无线网卡的MAC地址。
获取以太网卡的MAC地址(附源代码)2、C#编程要点Microsoft提供的WMI(Windows Management Instrumentation)中提供了一个Win32_NetworkAdapterConfiguration的类,定义了获取MAC地址的方法,因此只要构造一个定义为Win32_NetworkAdapter Configuration的WMI类,从中取出MAC地址的值即可。
在C#中管理WMI主要使用ManagementClass类。
编写程序过程要注意以下两个要点。
1)、命名空间的添加由于System.Management的动态链接库不是C#中默认加载的,所以要添加System.Management的命名空间前要添加System.Management.dll链接库。
依次选择:“项目”→“添加引用”→“.NET”菜单栏,加入System.Management。
确认添加了动态链接库后添加命名空间:usingSystem.Management;2)、MAC地址的获取根据前面的介绍,要构造一个ManagementClass类管理定义为Win32_NetworkAdapter Configuration的WMI类,然后将ManagementClass类中的所有变量的值返回给属于ManagementObjectCollection类的变量,ManagementObjectCollection类用于表示WMI实例的不同集合,将不同集合中的各个MAC地址读出,就可获得多网卡的MAC地址。
构造ManagementClass,函数原型如下:public ManagementClass(string path);参数:path表示WMI的路径。
要返回ManagementClass所有实例的集合,使用GetInstances (),函数原型如下:public ManagementObjectCollectionGetInstances();例如:获得本机上多网卡的MAC地址:ManagementClass mc; //定义一个ManagementClass类//将ManagementClass类变量定义为Win32_NetworkAdapter Configuration,以便获得//网络信息mc=new ManagementClass(” Win32_NetworkAdapterConfiguration”);//使用ManagementObjectCollection记录mc中的所有信息,包括多个网卡信息ManagementObjectCollectionmoc=mc. GetInstances();//取得ManagementObjectCollection中的不同网卡配置信息,判断如果该网卡可用就//去读取MAC地址foreach(ManagementObjectmo in moc){ if(mo[“IPEnabled”].T oString()= =”True”)Console.WriteLine(”MAC address”+mo[“MacAddress”].ToString());}using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Management;namespace ConsoleApplication3{class Program{staticvoid Main(string[] args){ManagementClass mc; //定义一个ManagementClass类//将ManagementClass类变量定义为Win32_NetworkAdapterConfiguration,以便获得//网络信息mc=new ManagementClass(" Win32_NetworkAdapterConfiguration");//使用ManagementObjectCollection记录mc中的所有信息,包括多个网卡信息ManagementObjectCollection moc=mc.GetInstances();//取得ManagementObjectCollection中的不同网卡配置信息,判断如果该网卡可用就//去读取MAC地址foreach(ManagementObject mo in moc){if (mo["IPEnabled"].ToString() == "True")Console.WriteLine("MAC address" + mo["MacAddress"].ToString());Console.ReadLine();}}}}。
如何获取网卡的MAC地址获取网卡的MAC地址可以通过以下几种方法:1.使用操作系统提供的命令行工具:不同的操作系统提供了不同的命令行工具来获取网卡的MAC地址。
下面分别介绍Windows和Linux操作系统下的方法。
- Windows操作系统:在命令提示符或PowerShell中输入"ipconfig /all"命令,会列出所有网络接口的详细信息,包括MAC地址。
- Linux操作系统:在终端中输入"ifconfig"命令,会列出所有网络接口的详细信息,包括MAC地址。
2.使用编程语言获取:可以使用各种编程语言(如Python、Java、C++等)提供的网络编程库来获取网卡的MAC地址。
下面以Python为例,演示如何通过编程获取网卡的MAC地址:```pythonimport subprocessimport redef get_mac_address(:result = subprocess.run(["ipconfig", "/all"],capture_output=True, text=True)output = result.stdoutmac_pattern = r"Physical Address[ .]*: (.*)"mac_address = re.findall(mac_pattern, output)[0].replace("-", ":")return mac_addressmac = get_mac_addressprint(mac)```这段代码通过执行"ipconfig /all"命令,并使用正则表达式匹配输出中的MAC地址,最终返回网卡的MAC地址。
3.使用网络管理工具:可以使用一些网络管理工具来获取网卡的MAC地址,这些工具通常提供了更丰富的功能和更友好的界面,比如Wireshark、NetCut等。
如何获取网卡的MAC地址获取网卡的MAC地址是一个常见的需求,在不同的操作系统中,可以使用不同的方法来获取。
下面将分别介绍在Windows、macOS和Linux系统中获取网卡MAC地址的方法。
在Windows系统中,可以通过以下步骤来获取网卡的MAC地址:1.打开「开始菜单」,在栏中输入「命令提示符」并打开命令提示符窗口。
2. 在命令提示符窗口中输入「ipconfig /all」并按下回车键。
3.系统会列出所有的网络适配器信息,包括网卡的物理地址(MAC地址)。
在相应的网络适配器部分,查找「物理地址」或「MAC地址」字段,即可找到对应的MAC地址。
在macOS系统中,可以通过以下步骤来获取网卡的MAC地址:1.打开「应用程序」文件夹,找到「实用工具」文件夹并进入。
2.打开「终端」应用程序。
3. 在终端中输入「ifconfig」并按下回车键。
4. 终端会列出所有的网络适配器信息,包括网卡的物理地址(MAC地址)。
在相应的网络适配器部分,查找「ether」字段,即可找到对应的MAC地址。
在Linux系统中,可以通过以下步骤来获取网卡的MAC地址:1.打开终端应用程序。
2. 输入以下命令并按下回车键:「ifconfig -a」或「ip link」。
3. 终端会列出所有的网络适配器信息,包括网卡的物理地址(MAC 地址)。
在相应的网络适配器部分,查找「ether」字段,即可找到对应的MAC地址。
除了以上的方法,还可以通过编程的方式来获取网卡的MAC地址。
不同编程语言提供了相应的API或库函数来获取网卡信息。
以下是使用Python编程语言获取MAC地址的示例代码:```pythonimport uuiddef get_mac_address(:mac = uuid.getnodemac_str = ':'.join(("%012X" % mac)[i:i+2] for i in range(0, 12, 2))return mac_strmac_address = get_mac_addressprint(mac_address)```这段代码使用了Python的uuid库中的getnode函数来获取网卡的MAC地址。
Windows中获取MAC地址的几种方法1.NDIS(DDK)通过驱动程序获取MAC地址ndis规范中说明,网卡驱动程序支持ioctl_ndis_query_stats接口参数如下:OID_802_3_PERMANENT_ADDRESS :物理地址OID_802_3_CURRENT_ADDRESS :mac地址于是我们的方法就得到了。
首先,看看注册表,找一找网卡有几块,分别是什么设备名。
具体位置和os有关,2000下在hlm\software\microsoft\windows nt\current version\networkcards。
然后createfile(devicename,...)注意,要用linkname,因此还要加上"////.//device//".接着deviceiocontrol(hmac,IOCTL_NDIS_QUERY_STA TS,OID_802_3_PERMANENT_ADDRESS/OID_802_3_CURRENT_ADDRESS...)具体的情况可以参看ddk下的OID_802_3_CURRENT_ADDRESS条目API-2得到MAC (MSDN推荐方法)#include <windows.h>//#include <wincon.h>#include <stdlib.h>#include <stdio.h>#include <time.h>typedef struct _ASTA T_{ADAPTER_STA TUS adapt;NAME_BUFFER NameBuff [30];}ASTA T, * PASTA T;ASTA T Adapter;int main (void){NCB Ncb;UCHAR uRetCode;char NetName[50];LANA_ENUM lenum;int i;memset( &Ncb, 0, sizeof(Ncb) );Ncb.ncb_command = NCBENUM;Ncb.ncb_buffer = (UCHAR *)&lenum;Ncb.ncb_length = sizeof(lenum);uRetCode = Netbios( &Ncb );printf( "The NCBENUM return code is: 0x%x \n", uRetCode );for(i=0; i < lenum.length ;i++){memset( &Ncb, 0, sizeof(Ncb) );Ncb.ncb_command = NCBRESET;Ncb.ncb_lana_num = na;uRetCode = Netbios( &Ncb );printf( "The NCBRESET on LANA %d return code is: 0x%x \n",na, uRetCode );memset( &Ncb, 0, sizeof (Ncb) );Ncb.ncb_command = NCBASTA T;Ncb.ncb_lana_num = na;strcpy( Ncb.ncb_callname, "* " );Ncb.ncb_buffer = (char *) &Adapter;Ncb.ncb_length = sizeof(Adapter);uRetCode = Netbios( &Ncb );printf( "The NCBASTA T on LANA %d return code is: 0x%x \n",na, uRetCode );if ( uRetCode == 0 ){printf( "The Ethernet Number on LANA %d is:%02x%02x%02x%02x%02x%02x\n",na,Adapter.adapt.adapter_address[0],Adapter.adapt.adapter_address[1],Adapter.adapt.adapter_address[2],Adapter.adapt.adapter_address[3],Adapter.adapt.adapter_address[4],Adapter.adapt.adapter_address[5] );}}}3.用COM API获取网卡MAC地址这种方法使用COM API创建一个GUID(全局唯一标识符)并从那里继承MAC地址。
取得系统中网卡MAC地址的三种方法获取系统中网卡MAC地址的方法有多种,以下列举其中三种常见的方法:在Windows系统中,可以使用命令行工具ipconfig来获取网卡MAC地址。
具体步骤如下:- 打开命令提示符窗口。
可以通过快捷键win+R打开运行窗口,输入cmd并按下回车键,或者在开始菜单中找到命令提示符并点击打开。
- 在命令提示符窗口中,输入指令ipconfig /all并按下回车键。
该指令将显示计算机的所有网络接口信息,包括网卡MAC地址。
-在显示的网络接口信息中,找到对应的网卡,查找其物理地址字段,即可获取其MAC地址。
在Linux系统中,可以使用命令行工具ifconfig来获取网卡MAC地址。
具体步骤如下:- 打开终端窗口。
可以通过快捷键Ctrl+Alt+T打开终端。
- 在终端窗口中,输入指令ifconfig并按下回车键。
该指令将显示计算机的所有网络接口信息,包括网卡MAC地址。
- 在显示的网络接口信息中,找到对应的网卡,查找其HWaddr字段,即可获取其MAC地址。
通过编程语言,可以编写程序来获取系统中网卡的MAC地址。
以下是使用Python语言获取MAC地址的示例代码:```pythonimport uuiddef get_mac_address(:mac = uuid.UUID(int=uuid.getnode().hex[-12:]return ":".join([mac[e:e+2] for e in range(0, 12, 2)])mac_address = get_mac_addressprint("MAC Address:", mac_address)```该代码通过调用uuid库中的UUID类和getnode函数,获取系统中第一个网卡的MAC地址。
在Windows系统中,可以通过查找系统注册表来获取网卡的MAC地址。
具体步骤如下:- 逐个打开子项,并在右侧窗口中查找DriverDesc键。
如何查网卡的MAC地址要查看网络接口卡(NIC)的MAC地址,可以采取以下几种方法:方法一:使用命令行1. 在Windows操作系统中,打开命令提示符。
点击开始菜单,然后“命令提示符”,并选择它的图标。
2. 在命令提示符窗口中,输入“ipconfig /all”(不含引号)并按下回车键。
在Mac操作系统中,打开终端应用程序。
点击“应用程序”文件夹,在其中找到并打开“实用工具”文件夹,然后选择“终端”。
3. 在终端窗口中输入“ifconfig”(不含引号)并按下回车键。
以上的命令在Windows和Mac操作系统中都会显示网络接口卡的信息,包括MAC地址。
方法二:使用系统设置1. 在Windows操作系统中,点击开始菜单,然后选择“设置”图标。
在Mac操作系统中,点击苹果菜单,然后选择“系统偏好设置”。
2.在设置窗口中,点击“网络”选项。
3.在网络设置中,选择要查看MAC地址的网络接口卡。
4. 在Windows系统中,点击“高级选项”按钮。
在Mac系统中,点击“高级”按钮。
5.在网卡的高级设置中,可以找到MAC地址。
要注意的是,每个网卡都有一个唯一的MAC地址,它由十六进制字符组成,通常由六对由冒号或破折号分隔的字符表示(例如:12:34:56:78:9A:BC)。
在一些情况下,如果计算机上使用了多个网卡,可能需要查看特定网卡的MAC地址。
此时,用第一种方法时,可以在命令提示符窗口中使用“ipconfig /all ,findstr /C:"Physical Address"”(不含引号)命令,来查找特定网卡的MAC地址。
总结:。
方法一:通过NetBIOS[Ne tbios is not support ed on Windows Vista, Windows Server 2008, and subsequent ver sions of the operati ng system]#include <windows.h>#pragma comment(lib, "Netap i32.lib")namespace{bool GetAdapterIn fo(int adapterNum, s td::string& macOUT){NCB Ncb;memset(&N cb, 0, sizeof(Ncb));Ncb.ncb_command = N CBRESET; // 重置网卡,以便我们可以查询Ncb.ncb_lana_n um = adapterNum;if(Netbios(&Ncb) != NR C_GOODRET)return fa lse;// 准备取得接口卡的状态块memset(&Ncb, sizeof(Ncb), 0);Ncb.ncb_c ommand = NCBASTAT;N cb.ncb_lana_num = ad apterNum;strcpy((ch ar *) Ncb.ncb_callna me, "*");struct AST AT{ADAPTER_STATUSadapt;NAME_BUFFER n ameBuff[30];}adapte r;memset(&adapter,s izeof(adapter), 0);Ncb.ncb_buffer = (un signed char *)&adapt er;Ncb.ncb_length = sizeof(adapter);if (Netbios(&Ncb) != 0)return false;char acMAC[32];sprintf(acMAC, "%02X-%02X-%02X-%02X-%02X-%02X",int (adapter.adapt.a dapter_address[0]),int (adapter.adapt.a dapter_address[1]),int (adapter.adapt.a dapter_address[2]),int (adapter.adapt.a dapter_address[3]),int (adapter.adapt.a dapter_address[4]),int (adapter.adapt.a dapter_address[5]));macOUT = acMAC;ret urn true;}}boolGetMacByNetBIOS(std::string& macOUT){// 取得网卡列表LANA_ENUM a dapterList;NCB Ncb;memset(&Ncb, 0, siz eof(NCB));Ncb.ncb_c ommand = NCBENUM;Nc b.ncb_buffer = (unsi gned char *)&adapter List;Ncb.ncb_length = sizeof(adapterLis t);Netbios(&Ncb);// 取得MACfor (int i= 0; i < adapterList.length; ++i){if (GetAdapterInfo(adapt na[i], macO UT))return true;}return false;}参考:取得系统中网卡MAC地址的三种方法方法二:通过对控制台ipconfi g /all命令重定向#include <Windows.h>#includ e <boost\regex.hpp>namespace{#if 0/// @brief 采用字符串查找来提取MAC地址/// @remark 该方法有很大局限性,并不是所有OS返回的MA C地址前导字符串都是/// "Physical Address. .. . . . . . . : "bo ol ParseMac(const st d::string& str, std::string& macOUT){s tatic const std::str ing beginMarkOfMAC("Physical Address. .. . . . . . . : ");static const std::st ring endMarkOfMAC("\r\n");size_t begin= str.find(beginMark OfMAC);if(begin !=std::string::npos){begin += beginMarkO fMAC.size();size_tend = str.find(endMa rkOfMAC, begin);if(end != std::string::npos){macOUT = str.substr(begin, end - begin - 1);returntrue;}}return fal se;}#else/// @bri ef 采用boost::regex来提取MACbool ParseMac(co nst std::string& str, std::string& macOU T){const static bo ost::regex expressio n("([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-fA-F]{2})-([0-9a-f A-F]{2})-([0-9a-f A-F]{2})",boost::rege x::perl | boost::reg ex::icase);boost::c match what;if(boos t::regex_search(str.c_str(), what, expre ssion)){macOUT =what[1] + "-" + what[2] + "-" + what[3]+ "-" + what[4] + "-" + what[5] + "-" +what[6];return true;}return false;}#endif}bool GetMa cByCmd(std::string&macOUT){bool ret = false;//初始化返回MAC地址缓冲区SECURITY_ATTRIB UTES sa;sa.nLength = sizeof(SECURITY_A TTRIBUTES);sa.lpSe curityDescriptor = N ULL;sa.bInheritHan dle = TRUE;//创建管道HANDLE hReadPipe,hWr itePipe;if(CreatePi pe(&hReadPipe, &hWri tePipe, &sa, 0) == T RUE){//控制命令行窗口信息S TARTUPINFO si;//返回进程信息PROCESS_INFORMA TION pi;si.cb = siz eof(STARTUPINFO);G etStartupInfo(&si);si.hStdError = hWri tePipe;si.hStdOutp ut = hWritePipe;si.wShowWindow = SW_HI DE; //隐藏命令行窗口si.dwF lags = STARTF_USESHO WWINDOW | STARTF_USE STDHANDLES;//创建获取命令行进程if (CreateProce ss(NULL, "ipconfig /all", NULL, NULL, TR UE, 0, NULL, NULL, &si, &pi) == TRUE){WaitForSingleObjec t(pi.hProcess, 3000); // 设置超时时间,防止Vista、Win7等操作系统卡死unsigned long count;CloseHa ndle(hWritePipe);st d::string strBuffer(1024 * 10, '\0'); //准备足够大的缓冲区if(ReadFi le(hReadPipe, const_cast<char*>(strBuffe r.data()), strBuffer.size() - 1, &count, 0) == TRUE){strBu ffer.resize(strBuffe r.find_first_of('\0')); // 截掉缓冲区后面多余的'\0'ret = ParseMac(str Buffer, macOUT);//提取MAC地址串}CloseHandle(pi.hThread);Close Handle(pi.hProcess);}CloseHandle(hWri tePipe); // VS2010下调试,此处会有“An invalid ha ndle was specified”的中断,直接运行正常,原因未知。
c++获取网卡MAC地址第一种方法使用Microsoft的Netbios API。
这是一套通过Winsock提供底层网络支持的命令。
使用Netbios 的最大缺点是您必须在系统中安装了Netbios服务(如果您在windows网络中启用了文件共享的话,这就不是问题了)。
除此此外,这种方法又快又准确。
Netbios API只包括了一个函数,就叫做Netbios。
这个函数使用网络控制块(network control block)结构作为参数,这个结构告诉函数要做什么。
结构的定义如下:typedef struct _NCB {UCHAR ncb_command;UCHAR ncb_retcode;UCHAR ncb_lsn;UCHAR ncb_num;PUCHAR ncb_buffer;WORD ncb_length;UCHAR ncb_callname[NCBNAMSZ];UCHAR ncb_name[NCBNAMSZ];UCHAR ncb_rto;UCHAR ncb_sto;void (CALLBACK *ncb_post) (struct _NCB *);UCHAR ncb_lana_num;UCHAR ncb_cmd_cplt;#ifdef _WIN64UCHAR ncb_reserve[18];#elseUCHAR ncb_reserve[10];#endifHANDLE ncb_event;} NCB, *PNCB;重点在于ncb_command 成员。
这个成员告诉Netbios该作什么。
我们使用三个命令来探测MAC地址。
他们在MSDN的定义如下:命令描述:NCBENUM Windows NT/2000: 列举系统中网卡的数量。
使用此命令后,ncb_buffer成员指向由LANA_ENUM结构填充的缓冲区。
NCBENUM 不是标准的NetBIOS 3.0 命令。
NCBRESET 重置网卡。
vbs脚本自动获取本个活动网卡mac地址Set ws = CreateObject("WScript.Shell")ws.Run "cmd /k ipconfig /all >d:\\ip.txt",0name=1call inputnameif abc (name)>0 thenmsgbox "姓名中有英文或数字,请重新打开程序输入中文姓名,谢谢"Wscript.Quitend iffunction ABC(byval a)for i = 1 to len(a)if (mid(a,i,1)>="a" and mid(a,i,1)<="z") or (mid(a,i,1)>="A" and mid(a,i,1)<="Z") thenn=n+1exit forelsen=0end ifnextabc=nend functionfunction inputnamename = InputBox("请输入姓名")If IsEmpty(name) ThenMsgBox "是不是没写姓名,请重新打吧"call inputnameElsemsgBox "你输入的名字是:"+(name)End Ifend functionif IsNumeric (name)=true thenmsgbox "姓名中有数字,请重新打开程序输入中文姓名,谢谢"Wscript.Quitend ifDim mc,moSetmc=GetObject("Winmgmts:").InstancesOf("Win32_NetworkAda pterConfiguration")For Each mo In mcIf mo.IPEnabled=True Thenmac=mo.MacAddressExit ForEnd IfNextmac=cstr(mac)mac=replace(mac,":","")Dim objFSODim strFileNewstrFile = "d:\\ip.txt"strFileNew = "\\\\192.168.0.220\\公共区域\\临时空间(15天自动清空)\\" & (name)&(mac)&".txt"Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")objFSO.CopyFile (strFile),(strFileNew)。
如何查网卡的MAC地址要查找网卡的MAC地址,可以按照以下几个步骤进行操作:1.使用命令行查找MAC地址:- 打开命令提示符或终端窗口,可以通过在Windows上按下Win + R 键,然后输入"cmd"并按下Enter键,在Mac上可以在应用程序文件夹的实用工具文件夹中找到终端。
- 在命令提示符或终端中,输入"ipconfig /all"(Windows)或"ifconfig -a"(Mac/Linux)并按下Enter键。
- 在结果中找到你的网卡名称(可能是以太网适配器或Wi-Fi适配器)以及其对应的物理地址(即MAC地址)。
MAC地址通常以类似于"XX-XX-XX-XX-XX-XX"的形式显示在"Physical Address"或"HWaddr"一栏中。
2. 在Windows上使用图形界面查找MAC地址:- 在Windows任务栏上的栏中键入"查看网络连接",然后选择"查看网络连接"选项。
-在"网络连接"窗口中,找到并右键单击你想查找MAC地址的网卡(以太网适配器或Wi-Fi适配器),然后选择"状态"选项。
-在"状态"窗口中,单击"详细信息"按钮。
-在"详细信息"窗口中,找到"物理地址"或"MAC地址"一栏,其中显示了你的网卡的MAC地址。
3. 在Mac上使用图形界面查找MAC地址:-点击屏幕上的苹果图标,然后选择"系统偏好设置"。
-在"系统偏好设置"窗口中,选择"网络"选项。
-在"网络"窗口中,选择你要查找MAC地址的网络连接(以太网或Wi-Fi)。
2、C#编程要点
Microsoft提供的WMI(Windows Management Instrumentation)中提供了一个Win32_NetworkAdapterConfiguration的类,定义了获取MAC地址的方法,因此只要构造一个定义为Win32_NetworkAdapter Configuration的WMI类,从中取出MAC地址的值即可。
在C#中管理WMI主要使用ManagementClass类。
编写程序过程要注意以下两个要点。
1)、命名空间的添加
由于System.Management的动态链接库不是C#中默认加载的,所以要添加System.Management的命名空间前要添加System.Management.dll链接库。
依次选择:“项目”→“添加引用”→“.NET”菜单栏,加入System.Management。
确认添加了动态链接库后添加命名空间:
using System.Management;
2)、MAC地址的获取
根据前面的介绍,要构造一个ManagementClass类管理定义为Win32_NetworkAdapter Configuration的WMI类,然后将ManagementClass类中的所有变量的值返回给属于ManagementObjectCollection类的变量,ManagementObjectCollection类用于表示WMI实例的不同集合,将不同集合中的各个MAC地址读出,就可获得多网卡的MAC地址。
构造ManagementClass,函数原型如下:
public ManagementClass(string path);
参数:path表示WMI的路径。
要返回ManagementClass所有实例的集合,使用GetInstances(),函数原型如下:
public ManagementObjectCollection GetInstances();
例如:获得本机上多网卡的MAC地址:
ManagementClass mc; //定义一个ManagementClass类
//将ManagementClass类变量定义为Win32_NetworkAdapter Configuration,以便获得//网络信息
mc=new ManagementClass(” Win32_NetworkAdapterConfiguration”);
//使用ManagementObjectCollection记录mc中的所有信息,包括多个网卡信息
ManagementObjectCollection moc=mc. GetInstances();
//取得ManagementObjectCollection中的不同网卡配置信息,判断如果该网卡可用就//去读取MAC地址
foreach(ManagementObject mo in moc)
{ if(mo[“IPEnabled”].ToString()= =”True”)
Console.WriteLine(”MAC address”+mo[“MacAddress”].ToString());
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
ManagementClass mc; //定义一个ManagementClass类
//将ManagementClass类变量定义为Win32_NetworkAdapter Configuration,以便获得//网络信息
mc=new ManagementClass(" Win32_NetworkAdapterConfiguration");
//使用ManagementObjectCollection记录mc中的所有信息,包括多个网卡信息
ManagementObjectCollection moc=mc.GetInstances();
//取得ManagementObjectCollection中的不同网卡配置信息,判断如果该网卡可用就//去读取MAC地址
foreach(ManagementObject mo in moc)
{
if (mo["IPEnabled"].ToString() == "True")
Console.WriteLine("MAC address" + mo["MacAddress"].ToString());
Console.ReadLine();
}
}
}
}。