本篇博客主要记载如何通过arp协议获取本地 活动主机的mac地址。
首先我们需要了解一下,什么叫做arp协议:地址解析协议,即ARP(Address Resolution Protocol),是根据ip地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
ARP数据包的结构:
获取其他mac地址的思路是首先获得本机的mac地址,构建一个arp数据包,通过创建一个发送线程向局域网内的主机广播arp数据包,然后同时创建一个接受线程,收到的arp数据包,解析之后就能得到ip地址以及mac地址。
代码:
结构体:
#include <stdio.h>
#include <string.h>
#include "pcap.h"
#include "Packet32.h"
#pragma pack(1) //按一个字节内存对齐
#define IPTOSBUFFERS 12
#define ETH_ARP 0x0806 //以太网帧类型表示后面数据的类型,对于ARP请求或应答来说,该字段的值为x0806
#define ARP_HARDWARE 1 //硬件类型字段值为表示以太网地址
#define ETH_IP 0x0800 //协议类型字段表示要映射的协议地址类型值为x0800表示IP地址
#define ARP_REQUEST 1
#define ARP_REPLY 2
#define HOSTNUM 2