#说明
本文是将Linux socket发送ARP请求包 C语言中的功能模块进一步编写成为了工具
使得可以修改ARP请求包中的源IP地址、目标IP地址以及源MAC地址
测试平台是kali
#使用演示
程序有两种参数输入模式,一种是包含源IP、目标IP、源MAC以及网卡设备名;另一种省略源AMC,即默认使用网卡真实MAC地址。
输入模式1
运行结果
抓包结果
输入模式2
运行结果(MAC为网卡真实MAC)
抓包结果
#代码
#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>
#include <linux/if_ether.h>
#include <linux/if_arp.h>
#define buffer_len 60 //ARP请求包大小为60B,,抓包时会抓到一些42B的包,这是抓包软件没有显示18B的Padding字段,Padding全0填充在包的末尾
/*ARP包结构*/
/*字段顺序不可更改,发包时是直接将buffer发出*/
struct arp_head
{
unsigned short hardware_type; //硬件类型#1:Ethernet
unsigned short protocol_type; //协议类型#0x0800:IPv4
unsigned char hardware_size; //MAC地址长度#6
unsigned char protocol_size; //IP地址长度#4
unsigned short opcode; //ARP类型#1:request;2:reply
unsigned char sender_mac[ETH_ALEN]; //源MAC地址
unsigned char sender_ip[4]; //源IP地址
unsigned char target_mac[ETH_ALEN]; //目标MAC地址
unsigned char target_ip[4]; //目标IP地址
};
int main(int argc, char* argv[