吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2755|回复: 14
收起左侧

[其他原创] 【batch】显示当前WiFi与密码并生成二维码分享

  [复制链接]
hoochanlon 发表于 2023-4-11 17:10

缘起

做这事呢,有三个要因:

一、自己写的 macOS shell生成当前WiFi密码并记录所有WiFi的脚本,收到需要Windows版的反馈太多了

二、坛友 leonca 在帖子里也贡献了他的“Windows获取所有WiFi密码”的脚本(其实已经很好了),我觉得还可以再写一个获取当前的WiFi脚本,应对不同需求。

三、应付工作环境,摸鱼划水基本上也都会用到三个系统:Windows、macOS、Linux

虽然测试最后还是选择了 python 作为二维码生成方案,由此特别感谢 lcg2014 讨论区帖子里提供“powershell生成二维码”的真诚讨论的建议。另外在延迟变量理解,以及在 “Windows版的软链接、别名”上略耗了点时间:

  • 延迟变量见  脚本之家-变量延迟详解 call setlocal,个人认为写的不错
  • “软链接”;Windows并不能像 macOS/Linux 使用 cat <<'EOF' >~/1.sh 这样来写文件,故PASS
  • “别名”;Windows的 alias 设置虽可以使用powershell,但容易污染环境,故PASS

思路:

  1. 通过netsh工具做好获取当前WiFi信息的代码
  2. 利用python、nodejs之类的二维码生成工具写入WiFi信息到二维码
  3. 将代码文件放入执行环境,并写入到环境变量这样就能在终端 %WIFI% 就能看当前WiFi并生成二维码了。
  4. btw:思路三也算是对如上“软链接”及“别名”方案变通处理。

效果图

未使用脚本前,环境变量。

本地测试图如下,需注意:

  • powershell环境使用cmd /c ${env:wifi} ,cmd 环境则是 %wifi%
  • 我对没有python环境的朋友做了选择性抛异常,见源码 pip install pillow > nul 2>&1 部分

在线测试图

![](https://s2.xptou.com/2023/04/11/6435180d742c7.png) 图床显示不稳定,故先注释

附源码:https://github.com/hoochanlon/ihs-simple/blob/main/d-bat/show_wifi.bat

@echo off

:: ----------- 测试特权提升可行性 -----------

@rem 右键运行或是管理员命令有些麻烦
@REM 兼顾本地与网络加载,仅测试使用!
@REM 由于需移动文件至设置环境目录,故上条 PASS
@REM 经本地测试,由于特权提升开启新窗口后,旧终端对二维码不兼容,PASS

:: ----------------- 检测环境变量 ------------

@REM 设置环境变量
if not defined %WiFi% > nul (setx WiFi "%userprofile%\show_wifi.bat")

:: ----------------- 获取当前WiFi与密码 ---------------------

@REM 排除BSSID(基本服务集标识符)信息,有干扰到正常SSID输出。
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%i in ('netsh wlan show interfaces ^| findstr "SSID" ^| findstr /v "BSSID"') do (
    set now_wifi_ssid=%%i
    @REM 替换空格
    set now_wifi_ssid=!now_wifi_ssid: =!
)

for /f "tokens=2 delims=: " %%i in ('netsh wlan show profile name^="%now_wifi_ssid%" key^=clear ^| findstr "关键内容"') do (
    set "now_wifi_password=%%i"
    set now_wifi_password=!now_wifi_password!
)

echo WiFi:%now_wifi_ssid%
echo WiFi密码:%now_wifi_password%

:: ----------------- 二维码 ---------------------------------

@REM 二维码基本上是照片打开,Windows终端(旧版)字符支持受限,效果不理想
@REM Windows11以上自带的新版终端可行!
@REM https://github.com/microsoft/terminal

pip install qrcode > nul 2>&1
pip install pillow > nul 2>&1
pip install qrcode-terminal > nul 2>&1
set data= WiFi:%now_wifi_ssid% WiFi密码:%now_wifi_password%
python -c "import qrcode_terminal; qrcode_terminal.draw('%data%')"

::------------ 移动文件至用户家目录 ---------------

if not exist "c:\%userprofile%\show_wifi.bat" > nul (
    move "%~dp0\%~nx0" "%userprofile%\%~nx0"
)

:: --------------- 参考部分 ----------------------------------

@REM @REM 参考文档及资料 一

@REM @REM "tokens=2 delims=:" 参数只能在 for 命令中使用,tokens=2 ,“:” 之后的第二文本
@REM @REM  "%now_ssid: =%" 将所有空格置 nul
@REM netsh wlan show profile /? 帮助文档
@REM netsh wlan show profile name="G***-***S" key=clear

@REM @REM [csdn -for /f命令之—Delims和Tokens用法&总结](https://blog.csdn.net/kagurawill/article/details/114982328)
@REM @REM [cnblogs -【No0000A4】DOS命令(cmd)批处理:替换字符串、截取字符串、扩充字符串、获取字符串长度](https://www.cnblogs.com/Chary/p/5825189.html)

@REM @REM 参考文档及资料 二

@REM WiFi名称输出的不是理想的结果 00,第一次取值正常,第二次成了00
@REM 找到方案为:开启延迟变量,脚本之家例子不错,说了那么多,其实就是以实时变量相对,条与行的概念也十分重要
@REM https://www.jb51.net/article/193245.htm

:: --------------- 参考部分 ----------------------------------

也算是提供一个参考了,后续坛友们要是有心的话,再做一个select二选一之类的增强也不错。

参考文档:

免费评分

参与人数 6吾爱币 +12 热心值 +6 收起 理由
TabKey9 + 1 + 1 用心讨论,共获提升!
fengse + 1 + 1 谢谢@Thanks!
kanyanhao + 1 + 1 我很赞同!
dizzy0001 + 1 + 1 收获很多,谢谢
tfl1 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| hoochanlon 发表于 2023-4-11 21:31

关于获取所有WiFi密码,这部分是受 老D网-CMD一键获取 所有连接过的WIFI密码 的启发。

老D帖子代码虽年久失修,但我觉得参考其代码,进行一次量体裁衣,应该还是蛮不错的。为了讲解方便,这里引用老D源码,做些必要性说明,同时也可做为大家学习研究的探讨话题。

老D源码:

for /f “skip=9 tokens=1,2 delims=:” %i in (‘netsh wlan show profiles’) do  @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear

就我当前环境而言,键入老D的代码,从图中可以看出信息虽全但未免显得过长,举个例子来说吧,同理于 ipconfig 差不多。坛友要使用的话,如果是保存为批处理文件,要多加%,如%%i,第二将中文引号换成英文的(如下图示)。

就我而言,只需要知道 ”WiFi“和”密码“就够了,注意上图红字,所以对于我来说,只需要写成一个懒人即用式代码就ok了。

netsh wlan show profiles | for /f "tokens=2 delims=:" %%i in ('findstr "用户配置文件"') do @echo %%i && netsh wlan show profiles name=%%i key=clear | findstr "关键内容"

较通俗直白的解释这段代码:显示所有保存过的WiFi信息,并将附加在WiFi名称上的多余滤掉("tokens=2 delims=:"),只剩WiFi名称了,再从这仅有的WiFi字段,不断地循环(for)地去找密码。

最后,我们再来看如下图(注意最上图提到的语法规则):

涛之雨 发表于 2023-4-11 21:54
【bat脚本】读取当前设备wifi密码(仅win10测试)
https://www.52pojie.cn/thread-1357673-1-1.html
(出处: 吾爱破解论坛)

bat获取wifi账号密码的我也写过,
记得还看过一个纯bat生成二维码的项目,才是那个才真的是大佬。。。

不过兼容性不大好。。。
大豹子 发表于 2023-4-11 21:42
 楼主| hoochanlon 发表于 2023-4-11 21:49
大豹子 发表于 2023-4-11 21:42
楼主能生成一个安卓apk给我们用吗

我不懂安卓,自己用了好几年的iOS了,也很少关心搞机方面的东西,记得上一次搞机还是诺基亚5230、N97那时代,平时也就看看微信、钉钉。

你试试看看有没有批处理这方面的安卓打包了,这方面我帮不了你什么忙了。
 楼主| hoochanlon 发表于 2023-4-11 22:01
涛之雨 发表于 2023-4-11 21:54
【bat脚本】读取当前设备wifi密码(仅win10测试)
https://www.52pojie.cn/thread-1357673-1-1.html
(出 ...

哈哈,这个确实大神,十分牛逼。之前有在选二维码工具看了这个 qrcode-terminal/issues/4  issue,我就觉得原生二维码肯定相当不容易,又是绘图、考虑字体点阵什么的,头皮发麻....

反正我是就算搭了老命也弄不了,哈哈

kanyanhao 发表于 2023-4-11 22:12
确实厉害
 楼主| hoochanlon 发表于 2023-4-11 22:22

我这个这是整合前人经验,加入了个人的一些想法。那个bat手搓二维码才是真大神,徒手造轮子,确实牛逼。
webzdqdxkj 发表于 2023-4-12 00:42
感谢大佬分享。。。
kaisen868 发表于 2023-4-12 00:48
多谢分享自制实用工具。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-27 16:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表