前言
大家可能遇到过这样的问题,同事,朋友来家里做客,询问起家里的 wifi 密码,想半天都没想起来。当然可以通过扫码分享的方式来共享,或者通过重置路由器的方式来重置、找回密码。那有没有什么其他更 程序员式 的方式呢?
于是找到了 wifi-password
正文
可能有同学要说,这和标题有什么关系呢?
别急,这要从源码说起。
源码分析
源码其实就一个文件 wifi_password.py
if args.ssid is None:args.ssid = get_ssid()password = get_password(args.ssid)
首先去获取 SSID,什么是 SSID 呢,简单理解就是 wifi 名称,如果为空,则默认是当前连接的 wifi。
那如何获取当前连接的 wifi 的 SSID 呢,通过命令行的方式,以 windows 为例
elif sys.platform == "win32":ssid = run_command("netsh wlan show interfaces | findstr SSID")if ssid == "":print_error("SSID was not found")ssid = re.findall(r"[^B]SSID\s+:\s(.*)", ssid)[0]
netsh wlan show interfaces | findstr SSID
敲出命令行 (cmd),成功获取 SSID ,没有任何问题
然后就拿 SSID 去获取密码了
elif sys.platform == "win32":password = run_command(f"netsh wlan show profile name=\"{ssid}\" key=clear | findstr Key")password = re.findall(r"Key Content\s+:\s(.*)", password)[0]
netsh wlan show profile name="SSID" key=clear | findstr Key
查出来为空,好家伙,难道命令有问题?仔细查看命令,运行一条指令,然后 grep 出 Key 关键字
运行 findstr 前的指令,确实有输出,但是,是这样婶儿的。
找到疑似密码的一行
关键内容,Key。
好了,答案呼之欲出,就是输出内容为中文导致的。
那如果把指令改成 findstr "关键内容" 是否可以?这样一来每个指令都需要考虑中文,另外还需考虑编码等各种因素。
那就换种思路,把输出改为英文。
代码页
windows 下的终端有个 代码页(PageCode) 的概念
可以通过 chcp命令 来查看和修改
默认是 936 简体中文(可能是随系统语言更改的,可以尝试把系统语言修改为 English)
那么如何修改修改默认代码页呢
参考 修改 cmd 控制台默认代码页编码的几种方法
文中提到
近期看到下面评论反应很多人在这里找不到 cmd 的选项,由于最近换了新电脑,新安装的 window 10 1903 专业版确实默认找不到(旧版升级过来的可能还保留有),考虑到自己手动添加也比较麻烦,建议大家直接转投 powershell 吧,毕竟 powshell 更强大。
Powershell
官网对 powershell 的介绍
PowerShell 是一种跨平台的任务自动化解决方案,由命令行 shell、脚本语言和配置管理框架组成。 PowerShell 在 Windows、Linux 和 macOS 上运行。
跟着网上的 demo PowerShell 教程 试了下,感觉,诶,还挺香
好,别忘记正事,修改注册表,修改完记得重启。再次运行
netsh wlan show profile name="SSID" key=clear | findstr Key
结语
之前由于 windows 自带的 cmd 不支持 linux 命令,所以一般操作都用 git.bash。
目前用下来感觉 powershell 好像都能支持,所以以后是不是可以考虑。。?
嗯,就酱。
还有,就是终端默认改成英文后,可能会存在部分程序(如一些依赖于本地配置文件的,例如RDM(当你名称定义为中文),INODE 等)相关配置消失的问题,所以最好还是改回去.