通过上一次的配置环境,现在就可以使用了,那么这里我们就先来发一个arp请求吧,这里建议大家安装一个wireshark(抓包工具,操作简单),以便于我们随时查看数据包,方便调试。
首先,我们需要知道的是,ARP是地址解析协议,工作在数据链路层,用来在一个局域网内获取一个IP的mac地址,当我们想要知道一个IP的MAC地址的时候,我们就向局域网广播一个arp请求,如果此IP为活动主机,则其就会回复一个arp应答,我们就是通过有没有收到arp应答来判断此ip主机是否为活动的。
按照上次文章所说的建立好工程,我建立的是简单的控制台程序,配好环境,写上需要的头文件,这里我们还需要#include"packet32.h",#include "ntddndis.h"这两个头文件,我们会用到里面的一些东西。
先定义三个结构体,用来表示我们的包,以太网首部和arp包
//以太网首部
struct ethernet_head
{
unsigned char dest_mac[6];//目的MAC地址
unsigned char source_mac[6];//源MAC地址
unsigned short eh_type;//帧类型
};
//arp数据包
struct arp_head
{
unsigned short hardware_type;//硬件类型
unsigned short protocol_type;//协议类型
unsigned char add_len;//硬件地址长度
unsigned char pro_len;//协议地址长度
unsigned short option;//操作类型,arp请求与应答,rarp请求与应答
unsigned char sour_addr[6];//源MAC
unsigned long sour_ip;//源IP
unsigned char dest_addr[6];//目的MAC
unsigned long dest_ip;//源IP
unsigned char padding[18];//填充数据
};
//发送的数据包
stru