有時候想在一個陌生環境透過 WiFi 連網,但是自己的電腦卻沒設定過,雖然隔壁的那台電腦已經設定好連線,但卻沒有人記得 WiFi 密碼是多少,這時該怎麼辦呢?原來 Windows 可以透過 netsh wlan
命令查詢出之前輸入過的密碼。
查詢目前電腦內有多少 WiFi 連線
你可以先透過以下命令找出所有 WiFi 連線,像我的筆電就曾經設定過兩百多條連線:
netsh wlan show profile
其輸出內容範例如下:
介面 Wi-Fi 上的設定檔:
群組原則設定檔 (唯讀)
---------------------------------
<無>
使用者設定檔
-------------
所有使用者設定檔 : Stockw
所有使用者設定檔 : Eddies2
所有使用者設定檔 : UPC5848620
所有使用者設定檔 : 0505
所有使用者設定檔 : 346128216197513
...
...
查詢特定 WiFi 連線的密碼
我們以 Stockw
為例,你可以輸入以下命令:
netsh wlan show profile name="Stockw" key=clear
你會得到以下結果,其中 金鑰內容
(Key Content
) 這個欄位就是 WiFi 的明文密碼:
介面 Wi-Fi 上的設定檔 Stockw:
=======================================================================
已套用: 所有使用者設定檔
設定檔資訊
-------------------
版本 : 1
類型 : 無線區域網路
名稱 : Stockw
控制選項 :
連線模式 : 自動連線
網路廣播 : 只有此網路正在廣播時才連線
AutoSwitch :不切換到其他網路
MAC 隨機化 :已停用
連線設定
---------------------
SSID 數目 : 1
SSID 名稱 : "Stockw"
網路類型 : 基礎結構
無線電波類型 : [ 任何無線電波類型 ]
廠商擴充 : 不存在
安全性設定
-----------------
驗證 : WPA2-Personal
加密方式 : CCMP
驗證 : WPA2-Personal
加密方式 : GCMP
安全性金鑰 : 現在
金鑰內容 : stck1234
成本設定
-------------
成本 : 不受限制
壅塞 : 否
接近資料限制 : 否
超過資料限制 : 否
漫遊 : 否
成本來源 : 預設值
如果你用 WSL 的話,也可以透過以下命令直接查出密碼:
netsh wlan show profile name="Stockw" key=clear | wsl grep "Key Content" | wsl cut -d ':' -f 2 | wsl sed "s/^[ \t]*//"
這裡有個地方我覺得很神奇,就是我直接執行 netsh wlan
命令,輸出的訊息為中文,但我如果將其內容 pipe 給 wsl
之後,其訊息竟然會變成英文,我不太能理解背後的原理為何。
匯出 WiFi 連線設定檔
你可以先建立一個資料夾,並透過以下命令將所有密碼匯出,基本上一個 WiFi 連線資訊就會書出一個 *.xml
檔案:
mkdir g:\wifipw
cd /d g:\wifipw
netsh wlan export profile key=clear name="Stockw"
我們以 Wi-Fi-Stockw.xml
為例,其內容如下,密碼就在 <keyMaterial>
標籤內容中:
<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>Stockw</name>
<SSIDConfig>
<SSID>
<hex>53746F636B7765726B</hex>
<name>Stockw</name>
</SSID>
</SSIDConfig>
<connectionType>ESS</connectionType>
<connectionMode>auto</connectionMode>
<MSM>
<security>
<authEncryption>
<authentication>WPA2PSK</authentication>
<encryption>AES</encryption>
<useOneX>false</useOneX>
</authEncryption>
<sharedKey>
<keyType>passPhrase</keyType>
<protected>false</protected>
<keyMaterial>stck1234</keyMaterial>
</sharedKey>
</security>
</MSM>
<MacRandomization xmlns="http://www.microsoft.com/networking/WLAN/profile/v3">
<enableRandomization>false</enableRandomization>
<randomizationSeed>2263576210</randomizationSeed>
</MacRandomization>
</WLANProfile>
你也可以透過 netsh wlan export profile key=clear
匯出所有 WiFi 連線設定檔,匯出成一堆 *.xml
檔案之後,可以透過以下 PowerShell 命令直接輸出所有 WiFi 連線的密碼!
dir *.xml |% {
$xml=[xml] (get-content $_)
if ($xml.WLANProfile.MSM.Security.sharedKey.keymaterial) {
Echo "$($xml.WLANProfile.SSIDConfig.SSID.name)`t$($xml.WLANProfile.MSM.Security.sharedKey.keyMaterial)"
}
}
匯入 WiFi 連線設定檔
當你透過 netsh wlan export profile key=clear
取得 WiFi 連線設定檔後,也可以透過以下命令加回去:
netsh wlan add profile filename="g:\wifipw\Wi-Fi-Stockw.xml"
由於之前匯出的 WiFi 連線設定檔已經內含明文的密碼,因此匯入之後馬上可以連線!👍
刪除用不到的 WiFi 連線設定檔
使用以下命令就可以刪除特定 WiFi 連線設定檔:
netsh wlan delete profile name="Stockw"
相關連結