【问题标题】:How can you automatically find out the WiFi passwords on Windows using Batch?如何使用 Batch 在 Windows 上自动查找 WiFi 密码?
【发布时间】:2020-02-24 15:03:10
【问题描述】:

感谢this (german) site知道批处理命令

netsh wlan show profile 

显示所有安全 WiFi 网络的名称,如下所示:

...
Benutzerprofile
---------------
    Profil fr alle Benutzer : <wifi network name 1>
    Profil fr alle Benutzer : <wifi network name 2>
...

之后就可以使用了

netsh wlan show profile <Name> key=clear

其中&lt;Name&gt; 代表获得的相应网络的名称,例如以上。

是否可以自动将两者结合起来?

【问题讨论】:

标签: batch-file


【解决方案1】:

这是我做的一个while back,不需要delayedexpansion

@echo off
setlocal enabledelayedexpansion
for /f "tokens=2delims=:" %%a in ('netsh wlan show profile ^|findstr ":"') do (
    set "ssid=%%~a"
    call :getpwd "%%ssid:~1%%"
)
:getpwd
set "ssid=%*"
for /f "tokens=2delims=:" %%i in ('netsh wlan show profile name^="%ssid:"=%" key^=clear ^| findstr /C:"Key Content"') do echo ssid: %ssid% pass: %%i

【讨论】:

  • @jeb 感谢您的编辑,我该死的键盘总是大写独立我:)
  • 适用于我所有带有一些奇怪名称的 Wifi,但它与语言无关。第一个FIND 可以更改为findstr ":",这应该适用于大多数语言。只有第二个似乎有点棘手
  • @jeb 是的,让我想想一些与语言无关的方法
  • 您的call :getpwd %%ssid:~1%% 似乎对于&amp;|&lt;&gt; 等内容存在风险。而且好像是allowed in SSID names!幸运的是,直到现在我还没有这样的名字
  • @jeb 对可能的特殊字符进行了更改。稍后将花一些时间使这种语言独立。
【解决方案2】:

对于下面的部分和:Trim 部分(thanks to 1or 2),需要延迟扩展以使此批处理文件中的变量在执行时而不是在解析时扩展。用法:由感叹号 (!) 分隔的变量在执行时进行评估。 这将确保在这种情况下行为正确。

echo|set /p="test text" 给出不带换行符的文本 (thanks)。

for /F "tokens=2 delims=:" %%i in (SavedNetworks.temp) do (...) 每行为您提供第二个标记,由: (source) 分隔。

SetLocal EnableDelayedExpansion
@echo|set /p="Lese die existierenden Netzwerke ein:"
netsh wlan show profile > SavedNetworks.temp
@echo|set /p="Verarbeite die eingelesenen Netzwerke (1):"
@echo off
for /F "tokens=2 delims=:" %%i in (SavedNetworks.temp) do (
call :Trim Actual %%i
netsh wlan show profile "!Actual!" key=clear >> SavedNetworks2.temp 
) 
@echo on
move SavedNetworks2.temp SavedNetworks.temp 
@echo|set /p="Verarbeite die eingelesenen Netzwerke (2):"
findstr "SSID-Name Sicherheitsschlssel Schlsselinhalt" SavedNetworks.temp >> SavedNetworks.txt
::notepad SavedNetworks.temp 
del SavedNetworks.temp 
notepad SavedNetworks.txt
::pause
exit /b

:Trim
::Line below already at the top.
::SetLocal EnableDelayedExpansion
set Params=%*
for /f "tokens=1*" %%a in ("!Params!") do EndLocal & set %1=%%b
exit /b

不幸的是,这个脚本不适用于所有语言,即这里:findstr "SSID-Name Sicherheitsschlssel Schlsselinhalt" SavedNetworks.temp &gt;&gt; SavedNetworks.txt(找到它here,命令和输出是德语版本)。要为您的语言找到合适的词,请取消注释 ::notepad SavedNetworks.temp 并将 :: 放在下一行前面。运行它并适当地替换"SSID-Name Sicherheitsschlssel Schlsselinhalt"

【讨论】:

  • 它错过了所有带有感叹号的 SSID!这就是FRITZ!Box ... WiFi 的全部内容
【解决方案3】:

我是这样写的:

文件:ShowWiFi.bat

@echo off
setlocal enabledelayedexpansion

for /F "tokens=2 delims=:" %%a in ('netsh wlan show profile') do (
    set wifi_pwd=
    for /F "tokens=2 delims=: usebackq" %%F IN (`netsh wlan show profile %%a key^=clear ^| find "Key Content"`) do (
        set wifi_pwd=%%F
    )
    echo %%a : !wifi_pwd!
)

示例输出

C:\>ShowWiFi
 Fiber5G :  SomePassword
 Courtyard_GUEST :
 redroof :
 Axon :  Password2
 Taco Bell WiFi :
 abelenkWiFi :  January
 SPS Internal :
C:\>

由于某种原因,这并没有显示所有密码,但确实显示了许多密码。

【讨论】:

  • 这对于带有空格的 SSID 会失败,就像您自己的示例为 Taco Bell WiFi 显示的那样。你必须使用nestsh wlan show profile name="%%a" key=clear。带有感叹号的 SSID 仍然失败
猜你喜欢
  • 1970-01-01
  • 2017-06-28
  • 2016-02-12
  • 2017-08-17
  • 1970-01-01
  • 2014-02-18
  • 2018-08-26
  • 2015-12-01
  • 1970-01-01
相关资源
最近更新 更多