用NetBIOS方法得到的网卡地址怎么乱七八糟,我想程序每次运行只返回唯一的一个稳定的MAC地址,该怎么做?枚举部分程序如下:
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);
AdapterList.length会有一堆,我该选哪一个才能保证每次返回都是唯一一个有效的mac地址呢?
程序的所有返回如下:
MAC Address: 80-F9-20-52-41-53
MAC Address: 80-F9-20-52-41-53
MAC Address: 80-F9-20-52-41-53
MAC Address: 80-F9-20-52-41-53
MAC Address: 80-F9-20-52-41-53
MAC Address: 00-00-00-00-00-00
MAC Address: 00-50-FC-09-D8-5B
重复一堆,还有假的。要求95/98/me/nt/2000 /xp都可以?
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);
AdapterList.length会有一堆,我该选哪一个才能保证每次返回都是唯一一个有效的mac地址呢?
程序的所有返回如下:
MAC Address: 80-F9-20-52-41-53
MAC Address: 80-F9-20-52-41-53
MAC Address: 80-F9-20-52-41-53
MAC Address: 80-F9-20-52-41-53
MAC Address: 80-F9-20-52-41-53
MAC Address: 00-00-00-00-00-00
MAC Address: 00-50-FC-09-D8-5B
重复一堆,还有假的。要求95/98/me/nt/2000 /xp都可以?
解决方案 »
- 关于wchar类型截取字符串的问题
- 请问用同一同步互斥对象保护多段不同数据时是否会效率低
- 为什么编译说找不到PIP_ADAPTER_ADDRESSES定义? 我明明已经加了头文件了
- 如何在代码中设置工具栏的某个图标选中?
- VS2008 Activx工程 EDIT控件如何关联Optional property name?
- IVideoWindow实现的全屏后如何让鼠标显示出来
- 如何备份outlook里的邮件?(请斑竹保留一天,急)
- UNIX下DCOM地实现
- ActiveX开发,vc2010,ocx,引入对话框,对话框上的按钮响应?
- 我的机器进不去"安全模式",怎么办怎么办怎么办怎么办啊???
- 用户手册该写些哪些方面?
- 学习《MFC深入浅出》时的一个小问题(关于VC开发环境)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>int get_mac_ip( ip, mac )
int *ip;
int *mac;
{
char *tfn, *cmd, *ipc = "ipconfig /all ";
int ret = 0;
FILE *tf;
char buf[128]; if ( (tfn = _tempnam(0, "ipconfig")) == (char *)0 )
ret = -1; if ( ret == 0 && (cmd = (char *)malloc(strlen(tfn) + strlen(ipc) +
4)) ==
(char *)0 )
ret = -1; (void)sprintf( cmd, "%s > %s", ipc, tfn ); if ( ret == 0 && (ret = system(cmd)) < 0 )
{
fprintf( stderr, "command \"%s\" failed with error <%s>\n",
cmd, strerror(errno) );
} if ( ret == 0 && (tf = fopen(tfn, "r")) == (FILE *)0 )
{
fprintf( stderr, "failed with error <%s>\n",
cmd, strerror(errno) );
}
while ( ret == 0 && fgets(buf, sizeof(buf), tf) != (char *)0 )
{
if ( strstr(buf, "Physical Address") )
{
if ( sscanf(strchr(buf,':')+2, "%02x-%02x-%02x-%02x-%02x-%02x",
&mac[0],
&mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) < 6 )
{
fprintf( stderr, "error in Physical Address line <%s>\n", buf );
ret = -1;
}
}
else if ( strstr(buf, "IP Address") )
{
if ( sscanf(strchr(buf,':')+2, "%u.%u.%x.%u", &ip[0], &ip[1],
&ip[2], &ip[3]) < 4 )
{
fprintf( stderr, "error in IP Address line <%s>\n", buf );
ret = -1;
}
}
} if ( tf ) fclose( tf );
if ( cmd ) free( cmd );
if ( tfn ) free( tfn ); return ret;
}main()
{
int ip[4], mac[6]; (void)get_mac_ip( ip, mac ); /* MUST USE %02X to keep first 0! */
printf( "MAC address: %02X-%02X-%02X-%02X-%02X-%02X\n", mac[0],
mac[1], mac[2],
mac[3], mac[4], mac[5] );
printf("%d %d %d %d %d %d\n",mac[0], mac[1], mac[2], mac[3],
mac[4], mac[5] );
printf( "IP address: %u.%u.%x.%u\n", ip[0], ip[1], ip[2], ip[3] );
}
IPAddr DestIP,// destination IP address
IPAddr SrcIP, // IP address of sender
PULONG pMacAddr, // returned physical address
PULONG PhyAddrLen // length of returned physical addr.);
ZHENG017(风中王子)你们的程序能跨平台吗,稳定吗
是MSDN的做法,而键入ipConfig/all则是非常通用的查看命令。