用Python脚本能获取Wifi密码么?能。
注意,本文不是破解 WIFI 密碼,當(dāng)然你把程序發(fā)給別人再獲取對(duì)方密碼,那是社會(huì)工程學(xué)。
文章目錄
- ?? 實(shí)戰(zhàn)場(chǎng)景與 `subprocess` 模塊介紹
- ?? Python 獲取本地 Wifi 密碼
?? 實(shí)戰(zhàn)場(chǎng)景與 subprocess 模塊介紹
這篇博客給大家?guī)硪粋€(gè)小小的案例,使用 Python 腳本獲取本地電腦記錄的所有 Wifi 密碼。
先介紹一下用到的模塊 subprocess,看模塊名就知道這是進(jìn)程模塊,它可以讓我們生成新的進(jìn)程,并對(duì)進(jìn)行進(jìn)行管理。
模塊中的常用函數(shù),如下所示。
- subprocess.run():執(zhí)行指定命令,等待執(zhí)行完成后返回一個(gè)包含執(zhí)行結(jié)果的 CompletedProcess 類對(duì)象;
- subprocess.call():執(zhí)行指定命令,返回命令執(zhí)行狀態(tài),與 os.system(cmd) 功能類似;
- subprocess.check_call():執(zhí)行指定命令,如果執(zhí)行成功返回狀態(tài)碼,否則拋出異常;
- subprocess.check_output() :執(zhí)行指定命令,如果執(zhí)行狀態(tài)碼為 0,返回執(zhí)行結(jié)果,否則拋出異常;
- subprocess.getoutput():接收字符串格式的命令,執(zhí)行并返回執(zhí)行結(jié)果,與之相同的函數(shù)有 os.popen(cmd).read();
- subprocess.getstatusoutput():執(zhí)行命令,返回一個(gè)元組(命令執(zhí)行狀態(tài),命令執(zhí)行結(jié)果)。
使用這個(gè)模塊還有一些注意事項(xiàng)。
既然優(yōu)先使用 subprocess.run() 方法,那我們看一下其語(yǔ)法格式。
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)參數(shù)說明如下:
- args:要執(zhí)行的 shell 命令,需要傳入字符串或者字符串參數(shù)列表;
- stdin,stdout,stderr:子進(jìn)程的標(biāo)準(zhǔn)輸入,輸出和錯(cuò)誤;
- timeout:命令超時(shí)時(shí)間;
- check:默認(rèn)為 False,如果設(shè)置為 True,則當(dāng)進(jìn)程退出狀態(tài)碼不是 0 的時(shí)候,拋出 CalledProcessError 異常;
- encoding:如果設(shè)置該參數(shù),則 stdin,stdout,stderr 可以接收字符串?dāng)?shù)據(jù),并以該編碼進(jìn)行編碼,否則只接收字節(jié)類型數(shù)據(jù);
- shell:設(shè)置命令是否通過 Shell 執(zhí)行。
有些這些基礎(chǔ)參數(shù)說明之后,就可以調(diào)用最簡(jiǎn)單的 Shell 命令了,例如查看本地 pip 包安裝清單。
import subprocesssubprocess.run(["pip","list"])運(yùn)行代碼,自行查看結(jié)果,當(dāng)然也可以把返回值捕獲到一個(gè)變量中,查看一下返回對(duì)象類型。
import subprocessret = subprocess.run(["pip","list"]) print(ret)輸出結(jié)果如下所示:
CompletedProcess(args=['pip', 'list'], returncode=0)此時(shí)返回的是 CompletedProcess 類的對(duì)象實(shí)例,它表示的是結(jié)束進(jìn)程之后的狀態(tài)心虛,包含如下屬性。
- args:該進(jìn)程執(zhí)行的命令;
- returncode:退出狀態(tài)碼,為 0 表示進(jìn)程成功運(yùn)行,負(fù)值-N 表示進(jìn)程被信號(hào) N 終止;
- stdout:從進(jìn)程捕獲到的輸出信息;
- stderr:從進(jìn)程捕獲到的錯(cuò)誤信息。
🍁 有了上述知識(shí)鋪墊之后,就可以完成 Python 獲取本地 Wifi 密碼案例了 🍁
?? Python 獲取本地 Wifi 密碼
獲取本地 wifi 密碼,先通過 CMD 命令實(shí)現(xiàn),分為兩步,如下所示。
第一步,獲取所有用戶配置文件,其結(jié)果為當(dāng)前電腦連接過的 wifi 名稱。
得到的結(jié)果如下所示。
這里僅在本機(jī)中找到了一個(gè)配置文件 realme GT Neo2T,然后通過下述命令查看 Wifi 密碼。
第二步,獲取上述配置文件對(duì)應(yīng)的密碼。
可以在運(yùn)行結(jié)果中找到保存密碼,如下所示。
有了上述兩條 CMD 命令,我們將其應(yīng)用到 Python 中,就實(shí)現(xiàn)了本案例訴求。
將 CMD 命令翻譯為 Python 代碼,首先獲取所有 wifi 信息。
import subprocess# 獲取本機(jī)wifi列表 output = subprocess.run(['netsh', 'wlan', 'show', 'profiles'], capture_output=True).stdout.decode('gbk').split('\n') print(output) wifi_list = [item.split(':')[1][1:-1] for item in output if "所有用戶配置文件" in item]print(wifi_list)接下來執(zhí)行第二條命令,獲取指定 wifi 密碼。
# 獲取 wifi 密碼 for wifi in wifi_list:ret = subprocess.run(['netsh', 'wlan', 'show', 'profile', f'name={wifi}', 'key=clear'],capture_output=True).stdout.decode('gbk', errors='ignore').split('\n')print(ret)results = [item.split(':')[1][1:-1] for item in ret if "關(guān)鍵內(nèi)容" in item]print(f'{wifi} 密碼:{results[0] if len(results)>0 else "無" }')最終的運(yùn)行結(jié)果如下所示。
realme GT Neo2T 密碼:12345678💰💰 完成本案例!
📢📢📢📢📢📢
💗 你正在閱讀 【夢(mèng)想橡皮擦】 的博客
👍 閱讀完畢,可以點(diǎn)點(diǎn)小手贊一下
🌻 發(fā)現(xiàn)錯(cuò)誤,直接評(píng)論區(qū)中指正吧
📆 橡皮擦的第 752 篇原創(chuàng)博客
從訂購(gòu)之日起,案例 5 年內(nèi)保證更新
- ?? Python 爬蟲 120,點(diǎn)擊訂購(gòu) ??
- ?? 爬蟲 100 例教程,點(diǎn)擊訂購(gòu) ??
總結(jié)
以上是生活随笔為你收集整理的用Python脚本能获取Wifi密码么?能。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [VBS]_[活动分组程序]
- 下一篇: Python对json数据的提取