Netbios 获取MAC (博客园第一篇自己的技术文章)

#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);
}

昨天无聊就想想写一些网络程序。
本想写一一个聊天工具,但发现没有c+sdk的聊天代码。
大多数都是MFC的,(主要是自己不懂多线程和Winsock I/O 异步模型,现在还在学习中)。现在不是很喜欢MFC所以就胡乱的翻开自己的电子书。
看到一个获取MAC源程序。
不过不幸的也是MFC。由于代码比较简单我就改成为sdk+c模式的。
不过很悲剧的时候,几乎一样的代码出先错误。(原来没有添加头,和动态库(库还是自己在目录下自己找的,随便一猜尽然猜对了。))
但改了后,发现尽然不能获取的自己MAC地址。
我勒个去,一模一样的代码啊。。于是百度,百了好久,发现和我一样的问题。他和他书上一模样的代码也得不出来。
他的也没有结果,但我还不死心继续百度,结果我还是没有找到。于是我彻底失望了。无聊翻着自己电子书。竟然我看到有关Netbios的一些协议的内容,
原来自己每一个网卡都一个Lana编码。书上说0~9。但我发现实际是0~8。如是我自己验证,果然是这样的,我太聪明了。嘻嘻。。。。
可能是那本书太老了,是xp以前的系统吧。。。
posted @ 2011-12-11 16:36  小鱼儿c  阅读(1738)  评论(0编辑  收藏  举报