如何获取对方的MAC地址呢? nbtstat -A 192.168.xxx.xxx注意大小写 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ---摘抄---获得MAC可以这样CString GetLocalMacAdd(){ CString sMacNumber; sMacNumber = "unknowuser00"; ASTAT Adapter; 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 ); for(i=0; i < lenum.length ;i++) { memset( &Ncb, 0, sizeof(Ncb) ); Ncb.ncb_command = NCBRESET; Ncb.ncb_lana_num = lenum.lana[i]; uRetCode = Netbios( &Ncb ); memset( &Ncb, 0, sizeof (Ncb) ); Ncb.ncb_command = NCBASTAT; Ncb.ncb_lana_num = lenum.lana[i]; strcpy( (char *)Ncb.ncb_callname, "* " ); Ncb.ncb_buffer = (unsigned char *) &Adapter; Ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios( &Ncb ); if ( uRetCode == 0 ) { if (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]!=0) { sMacNumber.Format("%02x%02x%02x%02x%02x%02x", 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] ); break; } } } return sMacNumber;} 使用下面这段代码可以得到本机的ARP表,其中存有最近和你连系过的所有机子的MAC,若要取得某IP的MAC,可以先和其连系一下,比如Ping一下,否则其MAC可能不在ARP表中。PMIB_IPNETTABLE pIpNetTable;HMODULE hModule;CString str,strTemp;typedef DWORD (CALLBACK* GETIPNETTABLE)(PMIB_IPNETTABLE,PULONG,BOOL);GETIPNETTABLE GetARP;DWORD dwSize;int i,j,ret;hModule=LoadLibrary("IPhlpapi.DLL"); //使用IPHlper函数,动态连接。//本函数作用是得到ARP表GetARP=(GETIPNETTABLE)GetProcAddress(hModule,"GetIpNetTable");if(GetARP!=NULL){ dwSize=0; pIpNetTable=NULL; ret=(*GetARP)(pIpNetTable,&dwSize,0); if(ret==ERROR_INSUFFICIENT_BUFFER){ pIpNetTable=(PMIB_IPNETTABLE)malloc(dwSize); (*GetARP)(pIpNetTable,&dwSize,0); for(i=0;i<pIpNetTable->dwNumEntries;i++){//得到全部条目 addr.s_addr =pIpNetTable->table [i].dwAddr; strTemp=inet_ntoa (addr);//IP地址 str+=strTemp; str+=" --- "; //MAC for(j=0;j<pIpNetTable->table [i].dwPhysAddrLen-1 ;j++){ strTemp.Format ("%X-",(BYTE)pIpNetTable->table [i].bPhysAddr[j]); str+=strTemp; } strTemp.Format ("%X",(BYTE)pIpNetTable->table [i].bPhysAddr [j]); str+=strTemp; str+="\r\n"; }//End of for }//End of if }//End of ifFreeLibrary(hModule); 一点补充:#include "Iprtrmib.h"#include "Iptypes.h." 谢谢大家的解答。谢谢。To:allanic(阿伦) 能不能告诉我在VC中如何调用nbtstat命令,及如何取得它的返回结果?谢谢。To:prog_st(st) 你提供的函数应该是只能得到本机的MAC地址吧?不知如何得到其他机器的MAC地址(在VC中)? 得到其它机器的MAC必须要得到ARP表,即利用IP助手函数GetIpNetTable。IP助手函数可以编写出类似Ipconfig、Netstat(取得TCP UDP监听者表及IP协议统计情况)、Route(处理网络路由表)以及Arp(显示并修改供地址解析协议”(ARP)使用的IP到物理地址翻译表)等的程序。 ole复合文档 MFC对话框中,我想通过一个加载区域的按钮控制另一个区域的加载窗体 请问如何实现在位图上画直线 跪求Windows高级开发工程师 小问题 如何把状态栏的背景色变成渐变色,或者说加上一个图片色作为背景??如何实现????? 问: 怎样设置网关的IP地址?并让它立即生效(不重新启动)? 求读图片的流程(消息行走的过程) 在网上点击安装应用软件的原理是什么?如网上安装支持Flash的插件等。 请教高人:手里只有".dll"文件,如何才能知道其入口参数的个数及参数类型? 靠!!这么今天老是出现这种倒霉的提示啊!!!!!!!!!!
CString GetLocalMacAdd()
{
CString sMacNumber;
sMacNumber = "unknowuser00";
ASTAT Adapter;
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 );
for(i=0; i < lenum.length ;i++)
{
memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = lenum.lana[i];
uRetCode = Netbios( &Ncb );
memset( &Ncb, 0, sizeof (Ncb) );
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = lenum.lana[i];
strcpy( (char *)Ncb.ncb_callname, "* " );
Ncb.ncb_buffer = (unsigned char *) &Adapter;
Ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( &Ncb );
if ( uRetCode == 0 )
{
if (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]!=0)
{ sMacNumber.Format("%02x%02x%02x%02x%02x%02x",
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] );
break;
}
}
}
return sMacNumber;
}
PMIB_IPNETTABLE pIpNetTable;
HMODULE hModule;
CString str,strTemp;
typedef DWORD (CALLBACK* GETIPNETTABLE)(PMIB_IPNETTABLE,PULONG,BOOL);
GETIPNETTABLE GetARP;
DWORD dwSize;
int i,j,ret;hModule=LoadLibrary("IPhlpapi.DLL"); //使用IPHlper函数,动态连接。
//本函数作用是得到ARP表
GetARP=(GETIPNETTABLE)GetProcAddress(hModule,"GetIpNetTable");
if(GetARP!=NULL){
dwSize=0;
pIpNetTable=NULL;
ret=(*GetARP)(pIpNetTable,&dwSize,0);
if(ret==ERROR_INSUFFICIENT_BUFFER){
pIpNetTable=(PMIB_IPNETTABLE)malloc(dwSize);
(*GetARP)(pIpNetTable,&dwSize,0);
for(i=0;i<pIpNetTable->dwNumEntries;i++){//得到全部条目
addr.s_addr =pIpNetTable->table [i].dwAddr;
strTemp=inet_ntoa (addr);//IP地址
str+=strTemp;
str+=" --- ";
//MAC
for(j=0;j<pIpNetTable->table [i].dwPhysAddrLen-1 ;j++){
strTemp.Format ("%X-",(BYTE)pIpNetTable->table [i].bPhysAddr[j]);
str+=strTemp;
}
strTemp.Format ("%X",(BYTE)pIpNetTable->table [i].bPhysAddr [j]);
str+=strTemp;
str+="\r\n";
}//End of for
}//End of if
}//End of if
FreeLibrary(hModule);
#include "Iprtrmib.h"
#include "Iptypes.h."
To:allanic(阿伦)
能不能告诉我在VC中如何调用nbtstat命令,及如何取得它的返回结果?谢谢。
To:prog_st(st)
你提供的函数应该是只能得到本机的MAC地址吧?不知如何得到其他机器的MAC地址(在VC中)?