获取本机MAC--小鱼儿无聊之作
昨天无聊就想想写一些网络程序。本想写一一个聊天工具,但发现没有c+sdk的聊天代码。
大多数都是MFC的,(主要是自己不懂多线程和Winsock I/O 异步模型,现在还在学习中)。现在不是很喜欢MFC所以就胡乱的翻开自己的电子书。
看到一个获取MAC源程序。
不过不幸的也是MFC。由于代码比较简单我就改成为sdk+c模式的。
不过很悲剧的时候,几乎一样的代码出先错误。(原来没有添加头,和动态库(库还是自己在目录下自己找的,随便一猜尽然猜对了。))
但改了后,发现尽然不能获取的自己MAC地址。
我勒个去,一模一样的代码啊。。于是百度,百了好久,发现和我一样的问题。他和他书上一模样的代码也得不出来。
他的也没有结果,但我还不死心继续百度,结果我还是没有找到。于是我彻底失望了。无聊翻着自己电子书。竟然我看到有关Netbios的一些协议的内容,
原来自己每一个网卡都一个Lana编码。书上说0~9。但我发现实际是0~8。如是我自己验证,果然是这样的,我太聪明了。嘻嘻。。。。
可能是那本书太老了,是xp以前的系统吧。。。
基本代码
GetMac.h
#include <WINDOWS.H> void GetMac();//获得物理地址
GetMac.cpp
程序代码:
#include "StdAfx.h" #include <nb30.h> #pragma comment(lib,"NETAPI32.LIB") void GetMac() { char strMac[256]; int ret; int i=0; char mac[1024]; char buf[256]; NCB ncb; ADAPTER_STATUS adapt; memset(buf,0,sizeof(buf)); memset(mac,0,sizeof(mac)); memset(&ncb,0,sizeof(ncb)); for(i=0;i<8;i++) { ncb.ncb_command=NCBRESET;//发送命令进行初始化 ncb.ncb_lana_num=i; ret=Netbios(&ncb); //sprintf(buf,"ret is %x",ret); // MessageBox(0,buf,0,0); //发送ncbastat获取网卡信息 if(0!=ret) { continue; } //MessageBox(0,buf,0,0); ncb.ncb_command=NCBASTAT; ncb.ncb_lana_num=i; strcpy((char *)ncb.ncb_callname,"*"); ncb.ncb_buffer=(unsigned char *)&adapt; ncb.ncb_length=sizeof(adapt); //这里都要填对应 Netbios(&ncb); if(adapt.adapter_type==0XFF) { strcat(mac,"Token Ring adapter "); } else if(adapt.adapter_type==0XFE) { strcat(mac," Ethernet adapter "); } sprintf(strMac,"%d MAC 地址是:%02X%02X-%02X%02X-%02X%02X\r\n", i, adapt.adapter_address[0], adapt.adapter_address[1], adapt.adapter_address[2], adapt.adapter_address[3], adapt.adapter_address[4], adapt.adapter_address[5]); strcat(mac,strMac); } MessageBox(0,mac,0,0); }
运行程序
小鱼儿获得MAC.zip
(30.96 KB)