编写Linux平台下ARP欺骗程序构造ARP数据包


自己学编写的一个基于Linux系统下的ARP欺骗程序,可以自己构造ARP欺骗数据包。可不要用在坏处啊。里面有两个执行文件ARPrequest和ARPresponse.

static int bigendian;

#include "arpdeceive.h"

/*命令行中所对应的长选项*/
struct option longopts[]=
{
 {"sha", required_argument, NULL, 'h'},
 {"sip", required_argument, NULL, 's'},
 {"dip", required_argument, NULL, 'd'},
 {"exclusive", required_argument, NULL, 'e'},
 {"interface", required_argument, NULL, 'i'},
 {"ifindex",required_argument,NULL,'x'},
 {"count",required_argument,NULL,'c'},
 {"flag",0,NULL,'f'},
 {"broadcast",0,NULL,'b'},
 {0, 0, 0, 0}
};

static int maclen=6;/*物理地址长度暂设定为6,以太网物理地址长度*/

ARPrequest是发送ARP请求,ARPresponse是发送ARP响应。

命令中各个选项的解释:

-s:指定源Ip地址,有三种指定方式 [-s hostip][-s hostip1,hostip2][-s hostip/netmask]

可以指定单个ip地址,也可以指定ip地址范围。例如-s 10.11.19.1,10.11.19.254就是指定从10.11.19.1到10.11.19.254的ip地址范围,-s 10.11.19.1/24就是指定10.11.19.0/24网段中的主机。

-d:指定目的ip地址,用法同上

-e:在上述的源、目的地址中不包含由-e所指定的ip地址或ip范围。例如

ARPrequest -s 10.11.19.254 -d 10.11.19.2/24 -e 10.11.19.25 ...

那么在发送ARP请求数据包时,不允许源、目的ip地址中包含10.11.19.25。

-i:指定所要发送出去的网络接口,例如-i eth0或者如果有几个以太网接口可以-i eth1...

--sha或-h:指定ARP数据包中指定的源物理地址,如果没有指定那么选择由-i所指定网络接口的物理地址作为ARP数据包的源物理地址。

-b:指定是否以广播方式发送ARP数据包,理论上ARP请求是以广播的方式发送的,ARP响应是以单播的方式发送,但是这里你可以指定发送方式,你可以指定ARP请求以单播方式发送,ARP响应以广播方式发送。因为如果你伪造的ARP请求以广播方式发送就会被网内的所有主机所接收从而被它们察觉到网内有相同ip地址的主机,所以你用ARPrequest发送ARP请求数据包的时候可以不指定-b选项从而让它以单播的方式发送出去。

-c:因为目的物理地址不需要用户指定,由程序从ARP缓存表中获得由-d选项所指定目标主机ip地址所对应的mac物理地址,例如ARPrequest -s 10.11.19.25 -d 10.11.19.26 -c 2 -f -i eth0.目的主机10.11.19.26的物理地址获得从ARP cache中找,若没找到就要发送获得10.11.19.26物理地址的ARP请求(执行程序ARPing -c 2 10.11.19.26 -I eth0),这里的-c就是指定发送ARP请求的个数,相当于命令ARPing中的-c选项。

-f:上面例子中若第一次从ARP cache中未获得10.11.19.26的mac物理地址,如果指定-f选项那么就要发送ARP请求,如果未指定-f选项,那么就不发送ARP请求,直接返回当10.11.19.26主机在网内是关闭的。

ARPresponse:是发送ARP响应。用法同ARPrequest相同。

ARPrequest、ARPresponse这两个程序可以编写成一个功能强大的脚本。

附件见下一页

  • 1
  • 2
  • 下一页

相关内容