是网卡的MAC地址吧!winsock里有函数能获得MAC地址,我有源码,要的话发信给我:[email protected]
解决方案 »
- 关于鼠标屏幕取词的问题,谢谢了,小菜鸟实在搞不定、、、、、
- IOCP可以做P2P服务器吗?
- 问个关于线程中SetTimer的问题
- 如何判断COM1或prn文件是否存在?操作系统是不允许创建该文件的。
- 在英文系统中,怎么显示中文?!(据说Unicode可以,可是弄了半天就是不行)
- 请教java代码里的一个小问题?
- 我有个VC6的画图程序,用Debug方式编译运行没有任何问题,但用release方式编译运行却无法打开图的存档文件,why?
- 如何阻止自己程序里的EDIT的剪切和粘贴功能
- 有关CListCtrl的虚函问题????
- ======================我刚来这里,也是VC初学者,大家给我介绍几本好书好吗?==================
- 高分寻人:Eie (没什么大不了) ....500分(我只有548了,留48点应急)
- 怎样实现程序“调用”程序?
// Link with ws2_32.lib and iphlpapi.lib
//#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iphlpapi.h>#pragma comment(lib,"iphlpapi.lib")int main(int argc, char **argv)
{
HRESULT hr;
IPAddr ipAddr;
ULONG pulMac[2];
ULONG ulLen;
if(argc!=2)
{
printf("SendArp <IP address>\n");
return 0;
}
ipAddr = inet_addr (argv[1]);
memset (pulMac, 0xff, sizeof (pulMac));
ulLen = 6;
hr = SendARP (ipAddr, 0, pulMac, &ulLen);
printf ("Return %08x, length %8d\n", hr, ulLen);
size_t i, j;
char * szMac = new char[ulLen*3];
PBYTE pbHexMac = (PBYTE) pulMac; //
// Convert the binary MAC address into human-readable
//
for (i = 0, j = 0; i < ulLen - 1; ++i) {
j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
}
sprintf (szMac + j, "%02X", pbHexMac[i]);
printf ("MAC address %s\n", szMac);
delete [] szMac; return 0;
}
//#include "stdafx.h"
#include <windows.h>
#include <nb30.h>#pragma comment( lib, "netapi32.lib")
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt ;
NAME_BUFFER NameBuff[30] ;
} ASTAT , *PASTAT ;ASTAT Adapter ;void getmac_one( int lana_num )
{
NCB ncb ;
UCHAR uRetCode ;// 首先对选定的网卡发送一个NCBRESET命令,以便进行初始化
memset( &ncb , 0 , sizeof( ncb ) ) ;
ncb.ncb_command = NCBRESET ;
ncb.ncb_lana_num = lana_num ; //指定网卡号uRetCode = Netbios( &ncb ) ;
printf( "The NCBRESET return code is : 0x%x \n" , uRetCode ) ;
memset( &ncb , 0 , sizeof( ncb ) ) ;
ncb.ncb_command = NCBASTAT ;
ncb.ncb_lana_num = lana_num ; //指定网卡号
strcpy( ( char* )ncb.ncb_callname , "*" ) ;
ncb.ncb_buffer = ( unsigned char * )&Adapter ; //指定返回的信息存放的变量
ncb.ncb_length = sizeof( Adapter ) ;
//接着,可以发送NCBASTAT命令以获取网卡的信息
uRetCode = Netbios( &ncb ) ;
printf( "The NCBRESET return code is : 0x%x \n" , uRetCode ) ;if ( uRetCode == 0 )
{
//把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802
printf( "The Ethernet Number[%d] is : %02x%02x-%02x%02x-%02x%02x \n" ,
lana_num ,
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] ) ;
}
}int main(int argc, char* argv[])
{
NCB ncb ;
UCHAR uRetCode ;
LANA_ENUM lana_enum ;memset( &ncb , 0 , sizeof( ncb ) ) ;
ncb.ncb_command = NCBENUM ;
ncb.ncb_buffer = ( unsigned char *)&lana_enum ;
ncb.ncb_length = sizeof( lana_enum ) ;
// 向网卡发送NCBENUM命令,以获得当前机器的网卡信息,如有多少个网卡、每张网卡的编号等
uRetCode = Netbios(&ncb);
printf( "The NCBENUM return code is : 0x%x \n" , uRetCode ) ;
if ( uRetCode == 0 )
{
printf( "Ethernet Count is : %d\n\n" , lana_enum.length ) ;
//对每一张网卡,以其网卡编号为输入编号,获得其MAC地址
for ( int i = 0 ; i < lana_enum.length ; ++i )
getmac_one( lana_enum.lana[i] ) ;
}
return 0;
}