用python编写的无线AP扫描器

代码如下:

  1 #coding=utf-8
  2
  3 import os
  4 import sys
  5 import subprocess
  6 from scapy.all import *
  7
  8
  9 RSN = 48    #管理帧信息元素(Dot11Elt)ID48是RSN信息
 10 WPA = 221   #管理帧信息元素ID221是WPA信息
 11 Dot11i = {0:‘GroupCipher‘,
 12           1:‘WEP-40‘,
 13           2:‘TKIP‘,
 14           4:‘CCMP‘,
 15           5:‘WEP-104‘
 16           } #RSN信息的第6字节
 17 WPA_Auth = {1:‘802.11x/PMK‘,
 18             2:‘PSK‘
 19            } #RSN信息的第22字节
 20 DN = open(os.devnull,‘w‘)
 21
 22 def get_wlan_interfaces():
 23     ‘‘‘
 24     返回当前PC上所有的无线网卡以及网卡所处的模式
 25     ‘‘‘
 26     interfaces = {‘monitor‘:[],‘managed‘:[],‘all‘:[]}
 27     proc = subprocess.Popen([‘iwconfig‘],stdout=subprocess.PIPE,stderr=DN)
 28     lines = proc.communicate()[0].split(‘\n‘)
 29     for line in lines:
 30         if line:
 31             if line[0] != ‘ ‘:
 32                 iface = line.split(‘ ‘)[0]
 33                 if ‘Mode:Monitor‘ in line:
 34                     interfaces[‘monitor‘].append(iface)
 35                 if ‘IEEE 802.11‘ in line:
 36                     interfaces[‘managed‘].append(iface)
 37                 interfaces[‘all‘].append(iface)
 38     if len(interfaces[‘managed‘]) == 0:
 39         sys.exit(‘[!]没有无线网卡,请插入网卡‘)
 40     return interfaces
 41
 42 interfaces = get_wlan_interfaces()  #获取当前的无线网卡
 43
 44 def get_strongest_inface():
 45     ‘‘‘
 46     通过iwlist dev scan命令,根据无线网卡可获取到的AP数量来判断哪个网卡的功率最强
 47     ‘‘‘
 48     iface_APs = []
 49     #interfaces = get_wlan_interfaces()
 50     for iface in interfaces[‘managed‘]:
 51         count = 0
 52         if iface:
 53             proc = subprocess.Popen([‘iwlist‘,iface,‘scan‘],stdout=subprocess.PIPE,stderr=DN)
 54             lines = proc.communicate()[0].split(‘\n‘)
 55             for line in lines:
 56                 if line:
 57                     if ‘- Address:‘ in line:
 58                         count += 1
 59             iface_APs.append((count,iface))
 60     interface = max(iface_APs)[1]
 61     return interface
 62
 63 def start_monitor_mode():
 64     ‘‘‘
 65     通过airmon-ng工具将无线网卡启动为监听状态
 66     ‘‘‘
 67     if interfaces[‘monitor‘]:
 68         print ‘[*]监听网卡为:%s‘ % interfaces[‘monitor‘][0]
 69         return interfaces[‘monitor‘][0]
 70     interface = get_strongest_inface()
 71     print ‘[*]网卡%s开启监听模式...‘ % interface
 72     try:
 73         os.system(‘/usr/sbin/airmon-ng start %s‘ % interface)
 74         moni_inface = get_wlan_interfaces()[‘monitor‘]
 75         print ‘[*]监听网卡为:%s‘ % moni_inface[0]
 76         return moni_inface
 77     except:
 78         sys.exit(‘[!]无法开启监听模式‘)
 79
 80 def get_AP_info(pkt):
 81     ‘‘‘
 82     从Dot11数据包中获取AP的SSID,BSSID,chanle,加密等信息
 83     ‘‘‘
 84     AP_info = {}
 85     bssid = pkt[Dot11][Dot11Elt].info
 86     ssid = pkt[Dot11].addr2
 87     chanle = str(ord(pkt[Dot11][Dot11Elt][:3].info))
 88     AP_infos = [bssid,chanle]
 89     wpa_info,cipher_info = get_Dot11_RSN(pkt)
 90     if wpa_info and cipher_info:
 91         AP_infos = AP_infos + [wpa_info,cipher_info]
 92     AP_info[ssid]=AP_infos
 93     return AP_info
 94
 95 APs_info = {}
 96 def get_APs_info(pkt):
 97     global APs_info
 98     if pkt.haslayer(Dot11) and (pkt.haslayer(Dot11Beacon) or pkt.haslayer(Dot11ProbeResp)):
 99         AP_info = get_AP_info(pkt)
100
101         if not APs_info.has_key(AP_info.keys()[0]):
102             APs_info.update(AP_info)
103     return APs_info
104
105
106 already_shows = []
107 def show_APs_info(pkt):
108     global already_shows
109     APs_info = get_APs_info(pkt)
110     for (key,value) in APs_info.items():
111         if key not in already_shows:
112             already_shows.append(key)
113             print ‘-‘ * 40
114             print ‘ [+]AP的BSSID:%s‘ % value[0]
115             print ‘ [+]AP的SSID:%s‘ % key
116             print ‘ [+]AP当前的chanle:%s‘ % value[1]
117             if len(value) == 4:
118                 print ‘ [+]AP的认证方式为:%s‘ % value[2]
119                 print ‘ [+]AP的加密算法为:%s‘ % value[3]
120             else:
121                 print ‘ [+]开放验证!!‘
122             print ‘-‘ * 40
123
124 def get_Dot11_RSN(pkt):
125     ‘‘‘
126     从Beacon帧以及ProbeResponse帧获取cipher及auth信息
127     ‘‘‘
128     ssid = pkt[Dot11].addr2
129     len_Elt = len(pkt[Dot11Elt].summary().split(‘/‘))
130     #print pkt.show()
131     for i in range(len_Elt):
132         if pkt[Dot11Elt][i].ID == RSN:
133             try:
134                 RSN_info = hexstr(pkt[Dot11Elt][i].info)
135                 cipher_index = RSN_info.find(‘ac‘) #第一个00 0f ac 02中的‘02’代表cipher
136                 auth_index = RSN_info.rfind(‘ac‘)   #从后往前数第一个00 0f ac 02中的‘02’代表AUTH
137                 cipher_num = int(RSN_info[(cipher_index + 3):(cipher_index + 5)])
138                 auth_num = int(RSN_info[(auth_index + 3):(auth_index + 5)])
139                 for key,value in Dot11i.items():
140                     if cipher_num == key:
141                         cipher_info = value
142                 for key,value in WPA_Auth.items():
143                     if auth_num == key:
144                         wpa_info = value
145             #print wpa_info,cipher_info
146                 return wpa_info,cipher_info
147             except:
148                 pass
149     return None,None
150
151
152
153
154
155 def sniffering(interface,action):
156     ‘‘‘
157     嗅探5000个数据包
158     ‘‘‘
159     print ‘[*]附近AP信息如下:‘
160     sniff(iface=interface,prn=action,count=5000,store=0)
161
162
163 def main():
164     moni_inface = start_monitor_mode()
165     sniffering(moni_inface, show_APs_info)
166
167 if __name__ == ‘__main__‘:
168     main()
169

运行结果如下:

 1 # python test_sniff.py
 2 WARNING: No route found for IPv6 destination :: (no default route?)
 3 [*]监听网卡为:wlan1mon
 4 [*]附近AP信息如下:
 5 ----------------------------------------
 6  [+]AP的BSSID:100msh-XXX
 7  [+]AP的SSID:84:82:f4:xx:xx:xx
 8  [+]AP当前的chanle:11
 9  [+]开放验证!!
10 ----------------------------------------
11 ----------------------------------------
12  [+]AP的BSSID:??¡????
13  [+]AP的SSID:d0:c7:c0:xx:xx:xx
14  [+]AP当前的chanle:11
15  [+]AP的认证方式为:PSK
16  [+]AP的加密算法为:CCMP
17 ----------------------------------------
18 ----------------------------------------
19  [+]AP的BSSID:FAST_XXX
20  [+]AP的SSID:78:eb:14:xx:xx:xx
21  [+]AP当前的chanle:11
22  [+]AP的认证方式为:PSK
23  [+]AP的加密算法为:CCMP
24 ----------------------------------------
25 ----------------------------------------
26  [+]AP的BSSID:FAST_XXX
27  [+]AP的SSID:0c:72:2c:xx:xx:xx
28  [+]AP当前的chanle:11
29  [+]AP的认证方式为:PSK
30  [+]AP的加密算法为:CCMP
31 ----------------------------------------
32 ----------------------------------------
33  [+]AP的BSSID:XXX
34  [+]AP的SSID:80:81:10:xx:xx:xx
35  [+]AP当前的chanle:8
36  [+]AP的认证方式为:PSK
37  [+]AP的加密算法为:TKIP
38 ----------------------------------------
39 ----------------------------------------
40  [+]AP的BSSID:XXX
41  [+]AP的SSID:80:81:10:xx:xx:xx
42  [+]AP当前的chanle:8
43  [+]AP的认证方式为:PSK
44  [+]AP的加密算法为:TKIP
45 ----------------------------------------
46 ----------------------------------------
47  [+]AP的BSSID:360免费WiFi-44
48  [+]AP的SSID:24:05:0f:xx:xx:xx
49  [+]AP当前的chanle:11
50  [+]AP的认证方式为:PSK
51  [+]AP的加密算法为:CCMP
52 ----------------------------------------
时间: 2024-08-03 23:20:15

用python编写的无线AP扫描器的相关文章

使用Python编写简单的端口扫描器的实例分享【转】

转自 使用Python编写简单的端口扫描器的实例分享_python_脚本之家 http://www.jb51.net/article/76630.htm -*- coding:utf8 -*- #!/usr/bin/python # Python: 2.7.8 # Platform: Windows # Authro: wucl # Program: 端口扫描 # History: 2015.6.1 import socket, time, thread socket.setdefaulttim

用python编写的简易端口扫描器

1 #coding = utf-8 2 3 ''' 4 python 3.4 5 通过简单的TCP端口连接来判断指定IP是否开放了指定端口. 6 ''' 7 8 import socket 9 import optparse 10 import re 11 import threading 12 import sys 13 14 def anlyze_host(target_host): 15 #将从--host参数获取到的目标值转换为标准的xxx.xxx.xxx.xxx形式,其中主要是利用so

监控无线AP是否在线python脚本

由于工作需要,编写了一个自动检查办公区无线AP是否掉线的python脚本,我这里用的是python3环境,请大家注意还有要注意的是我这里用的是锐捷的无线AC及无线AP.其它品牌只需要替换相关命令即可,就是脚本内容的中的command内容更改成你的品牌无线AC命令即可.下面是实际脚本内容: #!/usr/local/python3/bin/python3 import telnetlib,time,os def do_telnet(Host,password,finish,commands): i

无线AP忘记IP地址怎么办?介绍一款IP扫描软件

在无线网络应用中,有时经常遇到无线AP或无线路由的IP地址忘记了,无法用浏览器进入管理界面.常用的解决办法,按复位按钮,强行恢复出厂设置.如果仅仅是忘记了IP地址,也可以通过局域网IP扫描,找出无线AP或无线路由的IP地址.    Advanced IP Scanner是一款快速.强大.易于使用的局域网IP扫描器,它可以在几秒钟之内扫描出局域网计算机的相关信息.设定要扫描的IP位置范围.启动扫描功能,检测所有网络设备,包括Wi-Fi路由器和无线设备.1. 输入所需的IP地址范围(工具栏中的"IP

华三无线AP注册神器

如何解决华三无线AP大批量注册问题,一直是无线工程师的心病.为了解决这个问题,特此研发一款注册神器.一.组成华三无线AP注册神器由两部分组成,1.AP规划统计模板 2.EXE执行程序,使用起来非常方便.如下图1所示. 图1二.核心功能华三无线AP注册神器核心功能:1.生成注册脚本 2.生成删除脚本 3.生成修改脚本 4.帮助.如下图2所示. 图2三.项目实战演练1.操作流程项目实战操作流程如下图3所示.图32.根据平面图规划AP组.AP名称.信道和功率对于无法提供CAD图纸的客户,需绘制平面图.

如何排查无线AP在使用过程中的故障?

无线网络技术的飞速发展致使无线AP已渐渐融入我们的生活并与之密不可分.无线AP主要运用于企业.商场超市.酒店餐厅.学校工厂.展览展会等场所,为其构建WLAN并提供WiFi覆盖.很多终端用户觉得使用无线AP构建的商用WiFi的用户体验并不好,实际上快速好用的商用WiFi不仅要有好的无线AP设备做硬件支持,商户也应该对环境特点.最大用户数.产品特性.安装布局等多方位因素有个整体的了解,否则很可能选不到合适的WiFi覆盖方案或者即使有了可行度比较高的WiFi覆盖方案,在使用过程中出现一点小问题就手足无

python编写登录接口(上)

中途经过了好几天都没有动手了,得坚持下去啊刚看了Alex老师的视频,其中有个题目如下:编写登录接口-输入用户密码-认证成功后显示欢迎信息-输错三次后锁定 # -*- coding: cp936 -*-#用户名保存在一个文件名为user.txt文件中import os,stringtmp=file('C:\Users\hityxg\Desktop\user.txt')username=file('C:\Users\hityxg\Desktop\username.txt','w')b=tmp.rea

多个无线AP间无线组网实例

事因:今日公司新建一会议室,里面WIFI信号不好,要在其内放一AP增强WIFI信号,开墙打洞再拉一条网线的方案行不通,只好使用无线AP的WDS功能,进行AP间组网. WDS简介:WDS(Wireless Distribution System,无线分布式系统),通过无线链路连接两个或者多个独立的有线局域网或者无线局域网,组建一个互通的网络实现数据访问. WDS的优势:802.11 的无线技术已经在家庭.SOHO.企业等得到广泛地应用,用户已经能通过这些无线局域网方便地访问Internet 网络.

python编写登录接口

python编写登录接口 一.需求 编写登录接口: 1.输入用户名和密码登录 2.输错三次锁定账户 3.下次登录还是上次的账户,提示锁定,直接退出(用到文件读写) 4.成功 后显示登录成功 二.需求流程图 三.代码示例 例1: #!/bin/bash/env python #_*_ coding:utf-8 _*_ #python version:3.6 ''' 编写登录接口:     1.输入用户名和密码登录     2.输错三次锁定账户     3.下次登录还是上次的账户,提示锁定,直接退出