正常的情况下:取mac地址是在HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\VxD\MSTCP子键和HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\Class\Net子键下读取有关信息,对吧?
为了按NetBios的方法取mac地址,我在网上邻居->属性中安装了NetBEUI,但是HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\VxD\MSTCP子键下只有一个Hostname键,HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\下没有Class目录,这是为什么呢?
为了按NetBios的方法取mac地址,我在网上邻居->属性中安装了NetBEUI,但是HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\VxD\MSTCP子键下只有一个Hostname键,HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\下没有Class目录,这是为什么呢?
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>using namespace std;
#define bzero(thing,sz) memset(thing,0,sz)bool getadapterinfo(int adapter_num, string &mac_addr)
{
// 重置网卡,以便我们可以查询
ncb ncb;
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = ncbreset;
ncb.ncb_lana_num = adapter_num;
if (netbios(&ncb) != nrc_goodret) {
mac_addr = "bad (ncbreset): ";
mac_addr += string(ncb.ncb_retcode);
return false;
} // 准备取得接口卡的状态块
bzero(&ncb,sizeof(ncb);
ncb.ncb_command = ncbastat;
ncb.ncb_lana_num = adapter_num;
strcpy((char *) ncb.ncb_callname, "*");
struct astat
{
adapter_status adapt;
name_buffer namebuff[30];
} adapter;
bzero(&adapter,sizeof(adapter));
ncb.ncb_buffer = (unsigned char *)&adapter;
ncb.ncb_length = sizeof(adapter); // 取得网卡的信息,并且如果网卡正常工作的话,返回标准的冒号分隔格式。
if (netbios(&ncb) == 0)
{
char acmac[18];
sprintf(acmac, "%02x:%02x:%02x:%02x:%02x:%02x",
int (adapter.adapt.adapter_address[0]),
int (adapter.adapt.adapter_address[1]),
int (adapter.adapt.adapter_address[2]),
int (adapter.adapt.adapter_address[3]),
int (adapter.adapt.adapter_address[4]),
int (adapter.adapt.adapter_address[5]));
mac_addr = acmac;
return true;
}
else
{
mac_addr = "bad (ncbastat): ";
mac_addr += string(ncb.ncb_retcode);
return false;
}
}int main()
{
// 取得网卡列表
lana_enum adapterlist;
ncb ncb;
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = ncbenum;
ncb.ncb_buffer = (unsigned char *)&adapterlist;
ncb.ncb_length = sizeof(adapterlist);
netbios(&ncb); // 取得本地以太网卡的地址
string mac_addr;
for (int i = 0; i < adapterlist.length - 1; ++i)
{
if (getadapterinfo(adapterlist.lana[i], mac_addr))
{
cout << "adapter " << int (adapterlist.lana[i]) <<
"'s mac is " << mac_addr << endl;
}
else
{
cerr << "failed to get mac address! do you" << endl;
cerr << "have the netbios protocol installed?" << endl;
break;
}
} return 0;
}
2、NetBios协议
但是怎样得到远程主机的MAC地址,困惑。
如果需要原代码,给我发短信。
-------------------------------------------------
为了得到我应该得到的
为了找回我曾经失去的