ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

密码字典与Python脚本:WiFi弱口令测试实战与pywifi用法解析

2026/10/2 2:42:31 拓冰建站 浏览量
密码字典与Python脚本:WiFi弱口令测试实战与pywifi用法解析 简介面向Python安全测试初学者这份压缩包提供常见弱口令密码字典并附赠WiFi密码破解脚本覆盖字典构造与密码尝试两个环节适合在本地实验环境开展密码安全验证也适合作为CTF入门或无线安全课程的课外练习素材。压缩包共2个文件包含1个txt字典文件和1个py脚本文件整体仅14KB轻量易用解压后即可查看字典内容并运行脚本。该资源已有10524人学习/下载参考热度较高。txt字典内置弱口令及少量英文密码组合可直接用作脚本输入词库py脚本演示了WiFi密码破解工具的基本使用流程从读取字典到执行尝试的逻辑较清晰便于读者理解字典攻击的原理与脚本编写思路稍作修改即可替换字典内容重复测试。资源仅供学习和测试使用请勿用于非法用途。1. 常见密码字典与 Python 破解脚本这份资源拆开看值不值得下这份资源一共就三个文件常见密码字典弱口令加少量英文词、wifi.py 脚本、一个说明文本。对刚接触 Python 脚本和无线安全测试的人来说它解决的是最实际的尴尬——网上讲弱口令字典、讲 WiFi 密码破译的帖子不少但能凑齐一套「字典 脚本 可复现路径」的很少。我拆完之后的判断是适合三类人想验证自家路由器弱口令扛不扛得住的人想跑通 pywifi 调用链的 Python 入门者需要一份基线字典做内网安全自查的从业者。摘要里那句「仅供学习和测试用」是这个领域所有工具的统一前提。把它限定在自己家的网络和设备上是学习对象换成别人的网络性质就完全不同了。下文所有操作都默认你拿自家路由器做目标。2. 资源拆解字典组织规律、wifi.py 调用链与适用边界2.1 字典内容与组织逻辑弱口令排在前英文词做补充用文本编辑器打开字典文件从头到尾扫一遍能明显看出两层分类逻辑。前面几百行是经典弱口令按真实撞库统计里的出现频率排序123456、password、admin、admin888、12345678、qwerty、abc123、111111 这类打头中间夹着 666888、987654321、1q2w3e4r、zxcvbnm 这种数字序列、键盘相邻键位序列的变体。后半部分是少量英文词hello、welcome、letmein、sunshine、computer 这类大众词汇补的是「有人拿英文单词当前缀或整个密码」的场景。排列顺序不是随手写的。字典攻击的命中率高度依赖词序因为脚本逐行顺序尝试排在前面的密码被验证得最早也直接影响一轮跑完的耗时。你完全可以在对应位置插入自己收集的高频口令不必纠结原始分类——工具只认每行内容不认语义分组。分类典型密码覆盖场景纯数字弱口令123456、111111、888888图省事的普通用户键盘序列变体qwerty、zxcvbnm、1q2w3e4r键盘相邻键位形成的习惯密码账号同名口令admin、admin888、root管理后台常见弱配置英文词welcome、letmein、sunshine单词型密码另一个隐藏知识点是行格式。每行一个密码行尾是 LF 换行没有额外分隔符文件里不会出现空行、注释行和制表符。这一点直接关系到后文的踩坑场景如果文件在 Windows 上被某些编辑器改存成了 CRLF 换行严格按行读取的脚本会把每条密码末尾都带一个\r导致整轮匹配全部失败。拿到手先别急着跑用wc -lLinux或编辑器的行数显示Windows确认总行数再参照行数估算这轮测试的耗时。提示先用wc -l code_zip.txt确认字典总行数再决定是用默认参数还是调整超时。2.2 wifi.py 的执行链路扫描、选目标、逐条连接试探wifi.py 的核心链路是典型的 pywifi 实现四步走完一轮扫描周边 AP拿到 SSID 和认证信息选定目标网络将字典里的密码逐条写进连接配置发起连接试探通过接口状态判断密码是否正确。核心代码的常见写法是这样的import time import pywifi from pywifi import const wifi pywifi.PyWiFi() iface wifi.interfaces()[0] # 1. 扫描周边 AP iface.scan() time.sleep(2) for ap in iface.scan_results(): print(ap.ssid, ap.auth, ap.akm) # 2. 逐条尝试字典中的密码 for pwd in open(code_zip.txt, encodingutf-8): pwd pwd.strip() profile pywifi.Profile() profile.ssid target_ssid profile.auth const.AUTH_ALG_OPEN profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher const.CIPHER_TYPE_CCMP profile.key pwd iface.remove_all_network_profiles() tmp_profile iface.add_network_profile(profile) iface.connect(tmp_profile) time.sleep(3) # 等待连接结果 if iface.status() const.IFACE_CONNECTED: print(命中密码:, pwd) break这里几个参数值得单独说。AUTH_ALG_OPEN表示开放认证算法普通个人路由器的 WPA2-PSK 基本都是这个值AKM_TYPE_WPA2PSK是密钥管理协议对应路由器里「WPA2-PSK」这个选项CIPHER_TYPE_CCMP是加密套件对应 AES。三者必须和路由器实际配置一致否则连接试探会在握手阶段就失败字典再准也没用。如果目标开的是 WPA/WPA2 混合模式把 cipher 换成CIPHER_TYPE_TKIP或者同时把两种都加进 profile兼容性会好一些。time.sleep(3)是这段代码里最影响全局耗时的一句话。每试一个密码就要等三秒连接结果一千行字典就是五十分钟起步一万行是按天算。实战里有人把这个值压到 1 秒甚至 0.8 秒但压太低会出现「假失败」——路由器还没处理完上一条认证请求脚本就判定超时跳到下一条结果正确密码也被跳过去了。这个度后面避坑章还会展开。另一种更接近专业测试的路线是脱离 pywifi用 aircrack-ng 套件先抓握手包再用字典离线跑包速度快一个量级但对网卡监听模式有硬性要求。这份资源里的 wifi.py 走的是在线试探路线好处是普通网卡就能跑坏处是耗时和探测痕迹都更明显。它最合适的场景只有两个自家路由器自查、隔离环境里的演练。2.3 适用边界WPA2-PSK 弱口令场景与三个硬限制这套字典加脚本的组合适用范围很窄窄到可以用一句话概括针对 WPA2-PSK 个人网络的弱口令字典试探。三个硬限制提前认清能少走很多冤枉路。第一它基本碰不了 WPA3 网络。WPA3 的 SAE 握手流程和 WPA2-PSK 完全不同pywifi 的 Profile 参数对 WPA3 的支持很有限字典试探成功率趋近于零。第二它对强密码完全无效——十六位随机大小写加符号的密码字典里没有就是没有跑满一万行也不会有结果这是穷举空间决定的不是脚本缺陷。第三在线试探会触发路由器的防暴力破解机制连续多次认证失败后部分路由器会锁定来源或延长响应时间后续尝试全部超时失效。网上那些「一条命令破解任何 WiFi」的说法本质都是选择性展示——要么目标网络本来就是弱口令加没有防爆破策略要么视频里剪掉了前面几小时的抓包和筛选过程。这份资源能复现的上限就是「弱口令字典 在线试探」这个组合能触达的天花板提前想明白这点再动手体验会好很多。拿到资源后我建议第一件事不是急着跑真实网络而是把自家路由器临时设一个 12345678 的密码完整跑通一遍链路确认脚本和网卡都正常再切回真实密码。3. 把脚本跑通环境准备、参数调整与首次实测3.1 环境准备Python 版本、依赖安装与网卡选型先把最小环境讲清楚。脚本依赖的核心库是 pywifi安装命令一行pip install pywifi如果机器上有多个 Python 环境执行前先确认 pip 属于你要用的那个解释器。我习惯先跑python --version和pip --version对比两个版本输出里的路径是不是同一个避免把包装进了另一个环境回头脚本还是报 ModuleNotFoundError。Python 版本建议 3.8 到 3.10这个区间是 pywifi 适配最成熟的更新的版本原则上能跑但遇到编译型依赖时可能要自己处理兼容问题入门阶段没必要给自己加戏。网卡是最容易忽略的硬件门槛。在 Windows 下pywifi 走的是系统原生 WLAN API笔记本自带网卡就能完成扫描和连接试探不需要额外驱动。在 Linux 下pywifi 需要 wpa_supplicant 服务配合操作网络接口需要 root 权限所以常见做法是sudo运行。如果你想走 aircrack-ng 抓握手包那条离线路线普通内置网卡几乎都不支持监听模式需要外置 USB 网卡常见芯片方案是 RTL8812AU、RTL8811AU 这类插上后先确认接口被识别再继续# 查看无线接口和当前模式 iwconfig # 查看监听模式支持情况 sudo airmon-ng输出里能看到接口名wlan0、wlx 开头这样的和当前模式。如果看不到任何无线接口大概率是驱动没加载先处理驱动再跑脚本这一步跳不过去。3.2 默认参数实测一轮扫描与试探的完整输出解读环境就绪后先跑一遍扫描确认能看到目标网络。常见做法是给脚本加一个只扫描不试探的入口或者临时注释掉试探循环只保留扫描打印部分sudo python wifi.py --scan-only预期输出是一张 AP 列表包含 SSID、认证方式、加密算法长这样[] SSID: MyWiFi_5G auth: WPA2PSK akm: WPA2PSK [] SSID: ChinaNet-XXXX auth: WPA2PSK akm: WPA2PSK对照自家路由器的管理后台确认目标 SSID 能在列表里找到并且认证信息是 WPA2-PSK 对应的那组值。如果列表为空基本可以断定是网卡或者权限问题直接进第 4 章的避坑清单排查。扫描正常后跑完整试探sudo python wifi.py脚本会从字典第一行开始逐个密码向目标网络发起连接试探。观察点有两个一是每行密码之间的时间间隔是否稳定如果某些行耗时突然翻倍说明路由器开始限速或锁定二是命中后的输出正常实现会在IFACE_CONNECTED成立时打印密码并 break 跳出循环。一轮跑完没命中输出就是「字典穷举结束」之类的提示这时回到第 2 章说的适用边界去判断——是密码确实不在字典里还是环境配置有误导致全部假失败。3.3 参数调优字典路径、超时与重试的调整姿势脚本里最常见的可调参数是这几个普通场景改它们就够用DICT_PATH code_zip.txt # 字典文件路径可替换成合并后的大字典 TIMEOUT_SEC 3 # 每次连接试探等待结果的最大秒数 RETRY_TIMES 3 # 单条密码失败后的重试上限 DELAY_SEC 0.5 # 两次试探之间的固定停顿TIMEOUT_SEC是双刃剑。3 秒在信号良好时很稳但一千行就要五十分钟压到 1 秒能把一轮压缩到二十分钟以内但路由器响应稍慢就会出现假失败。我一般的做法是先按默认值跑一个小字典预热从耗时倒推当前环境下的合理超时——如果 3 秒一轮下来没有一条假失败再逐步往下压 0.5 秒压到出现失败就回调一档。RETRY_TIMES建议维持 3 以内重试太多会把时间全部耗在失败项上收益极低。DELAY_SEC在路由器有明显防爆破策略时才有存在意义自家路由器没有锁定机制的话可以设成 0省时间。字典路径的替换是最值得提前做的调整。这份资源自带的字典是基线版如果你手头有自己积累的口令集合合并去重后替换DICT_PATH即可脚本逻辑不用动。合并方法在第 5 章会给具体命令。4. 避坑排查五个高频翻车现场与修复方案4.1 现象扫描结果永远为空脚本像卡死一样现象跑了--scan-only等了很长时间终端一直不输出任何 AP 信息。原因排查下来多数是三个之一——无线网卡驱动没加载、Linux 下没权限操作网卡、或者网卡本身不支持扫描接口的切换操作。解决先iwconfig确认无线接口存在且没有被 down 掉用sudo重跑一次区分是不是权限问题如果换了sudo还是空基本就是驱动问题。笔记本内置网卡在 Linux 下的驱动兼容性很玄学这种场景我直接换支持良好的外置 USB 网卡省下的时间比省下的钱值。4.2 现象ModuleNotFoundErrorpywifi 装不上或装错环境现象执行import pywifi直接报ModuleNotFoundError: No module named pywifi但明明执行过pip install pywifi。原因最常见的是多 Python 环境并存pip 装进了 A 环境脚本却用 B 环境跑其次是某些精简系统镜像里 pip 和 python 版本不匹配。解决用which python和pip --version确认解释器路径一致不一致就指定解释器安装——python -m pip install pywifi是比裸pip install更稳的姿势。装的时候留意输出末尾有没有Successfully installed pywifi-xxx如果看到一堆编译警告而没看到安装成功说明依赖解析出问题先升级setuptools再重试。4.3 现象字典跑完一整轮零命中现象几千行密码全部试探完没有任何命中提示。原因三个方向排查——目标密码根本不在字典覆盖范围强密码场景字典文件被改成了 CRLF 换行导致每条密码尾部带\r连接超时压得太低导致正确密码也被判超时。解决先用一条「已知正确的弱密码」做冒烟验证比如把自己路由器临时改成字典第一行那个密码看能不能命中。能命中说明链路没问题问题出在目标密码强度不能命中就看换行符Linux 下用dos2unix code_zip.txt转一遍或者用sed -i s/\r$// code_zip.txt直接把行尾的\r剥掉。这两个操作都不改字典内容只是把行格式弄干净。4.4 现象密码明明在字典里验证却一直失败现象冒烟测试时把路由器密码设成了字典里的某一项但跑到那一项前后都没有命中。原因信号强度不够导致连接试探在握手阶段反复丢包或者路由器已经触发了防爆破锁定对连续认证失败来源暂时拒绝服务要么就是TIMEOUT_SEC压太低等于每次都在路由器响应前就放弃了。解决把设备挪到路由器旁边排除信号因素等锁定窗口过去再试把TIMEOUT_SEC恢复成 3用默认参数再跑一次。我踩过最典型的一次就是这个顺序——先压超时再换地方折腾两轮才发现是路由器固件默认开了失败锁定设成 3 秒超时后一次就过。4.5 现象中文 SSID 显示乱码目标网络对不上号现象扫描结果里中文 SSID 变成éŸ这类乱码无法和真实网络对应。原因终端编码和 Python 输出编码不一致Windows 下尤其常见——脚本按 UTF-8 解码终端按 GBK 显示或者反过来。解决在脚本的打印位置显式做编码归一常见做法是把扫描结果重新编码再解码一次更省事的方案是测试阶段把自家路由器 SSID 临时改成纯英文跑通后再改回来。这个坑不影响试探逻辑本身但影响选目标——选错目标网络后面整轮都是白跑。5. 从资源到能力字典扩充、跑包提速与每次测试后的验证习惯字典是这类资源的半条命。原始字典几十行到几百行实际测试中往往不够用我会把不同渠道收集的弱口令清单合并、去重按出现概率重排成一个大字典。合并命令很粗暴# 合并两个字典并去重 sort base.txt extra.txt | uniq merged_dict.txt # 统计合并后的行数 wc -l merged_dict.txt注意sort是按字典序排的去重彻底但会打乱原始频率顺序。如果你有统计频率的数据源可以把频率也带进排序——用awk给每行密码加一个出现次数权重字段按数字逆序排高频弱口令会自动浮到前面。这种重排对在线试探尤其有用因为每一条密码都要真实等待连接结果把最可能的密码放前面等于把命中时间前置。跑包提速有两个方向。在线试探路线能做的是压超时、去停顿代价是假失败风险上升实操里一般压到 1.5 秒就到头了。离线路线是换工具链用 aircrack-ng 抓握手包后aircrack-ng -w dict.txt handshake.cap离线跑包验证速度比在线试探快一个数量级这是这份资源之外更进阶的方向先把当前脚本跑透再上不迟。验证习惯是这套资源里最容易忽略的部分。我有一次测试完忘了把路由器密码改回来第二天路由器固件自动重启全家设备半天连不上回去一查才发现密码还是测试用的弱口令。从那以后我每次测试不管有没有命中都强制走一遍三步第一步把路由器恢复正式密码第二步用手机实际连接一次确认恢复生效第三步进路由器后台翻一遍认证日志看有没有遗留的异常失败记录。这套流程花不了两分钟但能挡掉百分之九十的低级事故。希望帮到你。本文还有配套的精品资源点击获取