#前言
手动输入的参数有网卡名、源IP和目标IP,它们定义在程序开头。如需调整其他ARP参数,只需对程序适当位置修改即可。
本程序着重在于功能实现的学习,故没有考虑像制作成工具一样的编写,尽量保证代码简洁。
需要先熟悉ARP包中的各个字段再来编写程序。
进一步改写为组包工具,可以自由设定源IP、目标IP以及源MAC:Linux ARP请求组包工具 C语言socket
程序基本分为三部分
构造以太网帧头部
构造ARP包内容
构造sockaddr_ll地址结构
其中以太网帧头部和ARP请求内容(也就是网络中传输的一个ARP包完整内容)共同存储在一个buffer中,构造好buffer之后通过socket发送出去即可。
#代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <linux/if.h>
#include <linux/if_packet.h>