获取电脑的MAC地址

	#include <nb30.h>
        #pragma comment(lib, "Netapi32.lib")

        //网卡结构
	typedef struct tagASTAT
	{
		ADAPTER_STATUS  adapt;
		NAME_BUFFER     NameBuff[30];
	}ASTAT, *LPASTAT;

	//存储网卡的MAC地址的结构
	typedef struct tagMAC_ADDRESS
	{
		UCHAR b1, b2, b3, b4, b5, b6;
	}MAC_ADDRESS, *LPMAC_ADDRESS;

	string GetComputerMac()
	{
		NCB ncb;                     //网络控制块  
		LANA_ENUM lana_enum;         //该结构包含网卡数目及其索引  
		memset(&ncb, 0, sizeof(ncb));      //NCB结构清零  
		ncb.ncb_command = NCBENUM;
		//向网卡发送 NCBENUM 命令,以获取当前计算机的网卡信息,
		//如有多少个网卡,每张网卡的编号等  
		ncb.ncb_buffer = (unsigned char *)&lana_enum;
		ncb.ncb_length = sizeof(lana_enum);

		UCHAR uRetCode = Netbios(&ncb);
		int num;               //标识网卡个数    

		MAC_ADDRESS  mac_addr[5];//假设最多有5个网卡

		if (uRetCode != 0)
			return "";

		num = lana_enum.length;
		//对每一张网卡,以其网卡编号为输入编号,获取其 MAC 地址    
		for (int i = 0; i < num; i++)
		{
			memset(&ncb, 0, sizeof(ncb)); //NCB结构重新清零

			ASTAT Adapter;

			//对选定的网卡发送一个 NCBRESET 命令,以便进行初始化    
			ncb.ncb_command = NCBRESET;
			ncb.ncb_lana_num = lana_enum.lana[i];

			uRetCode = Netbios(&ncb);

			//指定返回的信息存放的变量  
			memset(&ncb, 0, sizeof(ncb));
			ncb.ncb_command = NCBASTAT;
			ncb.ncb_lana_num = lana_enum.lana[i];   //指定网卡号

			strcpy_s((char *)ncb.ncb_callname, 2, "*");
			ncb.ncb_buffer = (unsigned char *)&Adapter;
			//指定返回的信息存放的变量 Adapter          
			ncb.ncb_length = sizeof(Adapter);

			//接着,发送 NCBASTAT 命令以获取网卡的信息           
			uRetCode = Netbios(&ncb);

			mac_addr[i].b1 = Adapter.adapt.adapter_address[0];
			mac_addr[i].b2 = Adapter.adapt.adapter_address[1];
			mac_addr[i].b3 = Adapter.adapt.adapter_address[2];
			mac_addr[i].b4 = Adapter.adapt.adapter_address[3];
			mac_addr[i].b5 = Adapter.adapt.adapter_address[4];
			mac_addr[i].b6 = Adapter.adapt.adapter_address[5];

			CString  strMac;
			strMac.Format(TEXT("%02X-%02X-%02X-%02X-%02X-%02X"),
				mac_addr[i].b1, mac_addr[i].b2,
				mac_addr[i].b3, mac_addr[i].b4,
				mac_addr[i].b5, mac_addr[i].b6);

			return LGTools::CStringToString(strMac);
		}
		return "";
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值