由于最近公司加強(qiáng)對(duì)無(wú)線安全的管理,wifi密碼從以前的12345678掉盅,變成復(fù)雜難記的一串也拜,導(dǎo)致我時(shí)常忘記WIFI密碼,而遭受同事的“毒打”趾痘。由于我不是那種喜歡打擾同事認(rèn)真工作的人慢哈,于是,我決定用python來(lái)試試永票,看看能不能讀取到已連接過(guò)WIFI的密碼卵贱,這樣就不用老是叨擾別人了!
1. windows查看WIFI密碼的方法
經(jīng)過(guò)我的一番思考和查閱資料(搜索引擎)侣集,原理大致是這樣键俱。
通過(guò)windows的wifi屬性查看密碼。這種方式世分,操作起來(lái)相當(dāng)麻煩编振,一般人根本找不到。即使第一次找到了臭埋,找第二次也要折磨死人踪央。
另外,我們可以使用命令行來(lái)實(shí)現(xiàn)上述操作:
netsh wlan show profiles
列出已連接wifi的列表
然后再使用命令 ``netsh wlan show profiles WiFi名稱 key=clear:
netsh wlan show profiles ZXQ key=clear
查看安全設(shè)置獲得密碼:
上面的方式瓢阴,仍然比較麻煩畅蹂,對(duì)于我這種懶人來(lái)說(shuō),實(shí)在是有點(diǎn)聒噪炫掐!我就想快速的查看密碼魁莉,不要輸入!
想到python也可以執(zhí)行cmd命令募胃,那么第二種命令行的方式握侧,不就可以用python來(lái)實(shí)現(xiàn)了嗎弟胀?!
2. 使用subprocess模塊
subprocess
是Python
標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,用于在Python
程序中執(zhí)行外部命令或子進(jìn)程湖笨。它可以通過(guò)創(chuàng)建子進(jìn)程并與其進(jìn)行通信屯蹦,來(lái)調(diào)用系統(tǒng)命令或其他可執(zhí)行文件宣蠕。
subprocess
模塊提供了多個(gè)函數(shù)來(lái)調(diào)用子進(jìn)程,如subprocess.run()
夺溢、subprocess.Popen()
等。這些函數(shù)可以執(zhí)行命令并返回執(zhí)行結(jié)果烛谊,也可以通過(guò)傳遞參數(shù)和讀取標(biāo)準(zhǔn)輸入輸出進(jìn)行進(jìn)程間的通信风响。
import subprocess
def get_wifi_password():
# 調(diào)用系統(tǒng)命令,獲取WiFi密碼
result = subprocess.check_output(['netsh', 'wlan', 'show', 'profile'])
result = result.decode('gbk') # 將命令輸出轉(zhuǎn)換為字符串
# 提取WiFi名稱
profiles = [i.split(':')[1][1:-1] for i in result.split('\n') if '所有用戶配置文件' in i]
# 獲取各個(gè)WiFi網(wǎng)絡(luò)的密碼
passwords = []
for profile in profiles:
password = subprocess.check_output(['netsh', 'wlan', 'show', 'profile', 'name=' + profile, 'key=clear'])
password = password.decode('gbk') # 轉(zhuǎn)換為字符串
password = [i.split(':')[1][1:-1] for i in password.split('\n') if '關(guān)鍵內(nèi)容' in i]
passwords.append((profile, password[0]))
return passwords
# 調(diào)用函數(shù)獲取WiFi密碼
wifi_passwords = get_wifi_password()
# 打印WiFi名稱和密碼
for wifi in wifi_passwords:
print(f'WiFi名稱:{wifi[0]}丹禀,密碼:{wifi[1]}')
Got it!, 有了這個(gè)腳本状勤,這不就是點(diǎn)一下的事么。在這個(gè)示例代碼中双泪,我們使用subprocess.check_output
函數(shù)調(diào)用了 netsh
命令來(lái)獲取已連接WiFi網(wǎng)絡(luò)的信息持搜。獲取到的信息中包含WiFi網(wǎng)絡(luò)的名稱和密碼。
送給公司行政的小姐姐用焙矛,下次她見(jiàn)到我葫盼,不得叫一聲大哥?
3. pywifi模塊暴力破解
PyWifi
是一個(gè)用于操作WiFi的第三方庫(kù)村斟,提供了方便的API以獲取WiFi信息贫导。其本身并不支持獲取已連接過(guò)的wifi的密碼。該庫(kù)主要用于連接蟆盹、斷開(kāi)以及掃描wifi網(wǎng)絡(luò)脱盲。
首先,我們需要使用pip命令來(lái)安裝pywifi
庫(kù):
pip install pywifi
由于此模塊基于 comtypes
模塊日缨,因此同時(shí)需要下載此模塊:
pip install comtypes
使用 PyWifi
,首先我們需要?jiǎng)?chuàng)建一個(gè)PyWifi
對(duì)象:
#-*-coding:utf-8-*-
import pywifi,time
from pywifi import const
def scan_wifi():
wifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0] #acquire the first Wlan card,maybe not
iface.scan() # 掃描wifi
time.sleep(1) # 休息一下
basewifi = iface.scan_results()
for i in basewifi:
print("wifi scan result:{}".format(i.ssid))
print("wifi device MAC address:{}".format(i.bssid))
# 嘗試連接wifi
profile = pywifi.Profile() #配置文件
profile.ssid = i.ssid #wifi名稱
profile.auth = const.AUTH_ALG_OPEN #需要密碼
profile.akm.append(const.AKM_TYPE_WPA2PSK) #加密類型
profile.cipher = const.CIPHER_TYPE_CCMP #加密單元
profile.key = gen_key() #wifi密碼
iface.remove_all_network_profiles() #刪除其它配置文件
tmp_profile = iface.add_network_profile(profile) #加載配置文件
iface.connect(tmp_profile)
time.sleep(5)
if iface.status() == const.IFACE_CONNECTED:
print("connect successfully!")
else:
print("connect failed!")
time.sleep(1)
return basewifi
def gen_key():
# 生成wifi破解密碼掖看,通用做法是讀取密碼字典庫(kù)
pass
if __name__ == '__main__':
scan_wifi()
因此匣距,小伙伴們要當(dāng)心哦,wifi密碼設(shè)置要復(fù)雜哎壳!否則被人偷用網(wǎng)絡(luò)都不知道哦毅待!
當(dāng)然咯,這個(gè)暴力破解的方法耗時(shí)也不穩(wěn)定归榕,而且也不一定正確尸红,本文只是從技術(shù)角度來(lái)闡述如何使用Python來(lái)玩WIFI, 并不建議大家做任何破壞性的操作和任何不當(dāng)?shù)男袨椤?/p>
上一篇:Python中的交互式數(shù)據(jù)可視化工具Streamlit
4.總結(jié)
為了能夠快速查看 Wi-Fi 密碼刹泄,我們介紹了兩種方法:一種是通過(guò) Windows 的 Wi-Fi 屬性查看密碼外里,另一種是使用Python 中的 subprocess 模塊來(lái)執(zhí)行命令行獲取密碼;
另外呢特石,有個(gè)名為 PyWifi 的第三方庫(kù)盅蝗,它可以用于操作 Wi-Fi,并提供了簡(jiǎn)單的 API 來(lái)獲取 Wi-Fi 信息姆蘸。比較適合我們獲取到該網(wǎng)絡(luò)的信息墩莫,以及使用 pywifi 模塊實(shí)現(xiàn)一些更高級(jí)的功能芙委,例如檢測(cè) Wi-Fi 網(wǎng)絡(luò)的質(zhì)量、分析數(shù)據(jù)流量等等狂秦。