hagejid
副版主
帖子
398
精华
0
无忧币 1992
积分 485
阅读权限 140
|
发表于:2007-9-27 07:28
该回复被 lylfqy 奖励 20 点无忧币
此回复于2007-09-27 09:53被 lylfqy 评为最佳答案
使用 SendARP 查询 MAC 地址
这是我使用过的能用的方法
不过我在学校了,所以我做的一个源程序没能放上来
那些用NETBIOS API 的方法在一些没装NETBIOS协议的机器上用不了
其中一些头文件找找就行了
希望你不是做流氓软件的统计功能,呵呵
通过 IP Helper API 中的 SendARP 发送 ARP 请求来获取 MAC 地址,简单方便,缺点是不能跨越网关。
#include
#include
#include
#pragma comment(lib , "IpHlpApi.lib")
#pragma comment(lib , "WS2_32.lib")
int main(int argc,char * argv[])
{
int iReturn;
DWORD dwIP;
BYTE byMAC[6];
DWORD dwLen;
WSADATA WsaData;
WSAStartup(MAKEWORD(2, 0), &WsaData);
__try
{
printf("IP2MAC Ver 1.0 -- Get MAC address from IP address though ARP request.\n\n");
if (argc != 2)
{
printf("Usage: %s \n", argv[0]);
__leave;
}
dwIP = inet_addr(argv[1]);
if (dwIP == INADDR_NONE)
{
printf("Invalid IP address: %s.\n", argv[1]);
__leave;
}
// 发送ARP查询包获得 MAC 地址
dwLen = 6;
iReturn = SendARP(dwIP, 0, (PULONG) &byMAC, &dwLen);
if (iReturn != NO_ERROR)
{
printf("Error: Send ARP request. \nBe sure that connectting to %s need no gateway.\n", argv[1]);
__leave;
}
printf("%.2X-%.2X-%.2X-%.2X-%.2X-%.2X\n",
byMAC[0],
byMAC[1],
byMAC[2],
byMAC[3],
byMAC[4],
byMAC[5]);
}
__finally
{
WSACleanup();
}
return 0;
}
来源:http://hi.baidu.com/hentor/blog/item/487aad1863897b0634fa4166.html
|
 C到底该不该学,看看这个就明白 |
|