用SendARP()获取对方的MAC地址
来源:互联网 发布:sql 关键字书写顺序 编辑:程序博客网 时间:2024/05/01 19:04
使用SendARP()函数,发送ARP请求,以获取对方的MAC地址。
/* sendarp.c * Link with wsock32.lib and iphlpapi.lib */#pragma comment(lib,"iphlpapi.lib")#pragma comment(lib,"wsock32.lib")#include <winsock2.h>#include <iphlpapi.h>#include <stdio.h>void usage(char *pname){printf("Usage: %s [options] ip-address\n", pname);printf("\t -h \t\thelp\n");printf("\t -s src-ip \tsource IP address\n");exit(1);}int __cdecl main(int argc, char **argv){ DWORD dwRetVal = 0; IPAddr DestIp = 0; IPAddr SrcIp = 0; /* default for src ip */ULONG MacAddr[2] = {0}; /* for 6-byte hardware addresses */ ULONG PhysAddrLen = 6; /* default to length of six bytes */ char *DestIpString = NULL; char *SrcIpString = NULL; BYTE *bPhysAddr; int i; if (argc > 1) { for (i = 1; i < argc; i++) { if ((argv[i][0] == '-') || (argv[i][0] == '/')) { switch (tolower(argv[i][1])) { case 's': SrcIpString = argv[++i]; SrcIp = inet_addr(SrcIpString); break; case 'h': default: usage(argv[0]); break; }/* end switch */ } else{ DestIpString = argv[i];} }/* end for */ }else{ usage(argv[0]);} if (DestIpString == NULL || DestIpString[0] == '\0'){ usage(argv[0]);} DestIp = inet_addr(DestIpString);printf("Sending ARP request for IP address: %s\n", DestIpString);PhysAddrLen = sizeof(MacAddr);memset(&MacAddr, 0xff, sizeof (MacAddr)); dwRetVal = SendARP(DestIp, SrcIp, &MacAddr, &PhysAddrLen); if (dwRetVal == NO_ERROR) { bPhysAddr = (BYTE *) &MacAddr; if (PhysAddrLen) { for (i = 0; i < (int) PhysAddrLen; i++) { if (i == (PhysAddrLen - 1)){ printf("%.2X\n", (int) bPhysAddr[i]);} else{ printf("%.2X-", (int) bPhysAddr[i]);} } }else{ printf("Warning: SendArp completed successfully, but returned length=0\n");} } else { printf("Error: SendArp failed with error: %d", dwRetVal); switch (dwRetVal){ case ERROR_GEN_FAILURE: printf(" (ERROR_GEN_FAILURE)\n"); break; case ERROR_INVALID_PARAMETER: printf(" (ERROR_INVALID_PARAMETER)\n"); break; case ERROR_INVALID_USER_BUFFER: printf(" (ERROR_INVALID_USER_BUFFER)\n"); break; case ERROR_BAD_NET_NAME: printf(" (ERROR_GEN_FAILURE)\n"); break; case ERROR_BUFFER_OVERFLOW: printf(" (ERROR_BUFFER_OVERFLOW)\n"); break; case ERROR_NOT_FOUND: printf(" (ERROR_NOT_FOUND)\n"); break; default: printf("\n"); break; } } return 0;}
经测试,无法获取127.0.0.1的MAC地址,可以获取正常IP的MAC地址:
E:\>sendarp 172.16.27.38
Sending ARP request for IP address: 172.16.27.38
E8-9A-8F-F9-3C-D2
- 用SendARP()获取对方的MAC地址
- 获取对方的mac地址
- 用SendARP API函数获取远程主机MAC地址学习心得
- 使用SendArp来获取MAC地址
- 使用SendArp来获取MAC地址
- 通过IP地址获取对方MAC地址的命令
- 使用 SendARP 查询 MAC 地址
- 通过IP或socket获取对方的MAC地址
- 通过IP或socket获取对方的MAC地址
- 通过IP或socket获取对方的MAC地址
- 通过IP或socket获取对方的MAC地址
- 通过IP和socket获取对方的MAC地址
- 通过IP或socket获取对方的MAC地址
- 使用SendArp()探测局域网内主机的MAC地址
- 查找对方主机的MAC地址
- 板子如何知道对方的MAC地址?
- 通过对方的请求 获取对方的ip地址
- nodejs 如何获取对方的IP地址
- 注意 c++ vector中的erase()
- Runtime 异常和Checked异常
- 派生类StudentB对基类StudentA的继承
- 页面处理json数据
- popcount或者hamming weight(二进制1的个数问题)
- 用SendARP()获取对方的MAC地址
- 关于方程a^x=1(mod m)的最小x解
- TCP字节流与UDP数据报
- 第十三周--项目2-采用多重继承方式由Teacher类和Cadre类派生出Teacher_Cadre
- 搜搜反链暴增几十亿后,你还淡定吗?
- hdu1518 Square
- Redis.conf
- C/C++--常见错误
- POJO、Java bean、EJB的概念解析