是什麼讓我產生了製作一個用於分析 WiFi 網路的袖珍工具的想法
感謝他們的想法。 我只是無事可做。
所有工作都是作為愛好的一部分完成的,目的是為了獲得樂趣並擴展我在網路技術領域的知識。 從今年年初開始,慢慢地,每週 1..4 小時。
我沒有計劃任何實際用途。 那些。 這不是駭客工具。
目前,所有計劃的功能都正在運作。 所有來源,完全準備好組裝,
我對「萬能工具」的看法以及選擇ESP32的原因
我並不聲稱自己是事實。 每個人都有自己的。 我將嘗試證明我選擇的硬體的合理性。
也許我錯了,將來作者將公開軟體來源。 但如果沒有,那麼我就不會購買這樣一個沒有原始碼的硬體。
我對「工具」的要求
盒子應該小(越小越好)。
這就是為什麼:
- 無需內建電池。 使用 Wifi 時電流 > 100 mA,內建電池不是很大,就是續航力不長。 因此,讓“盒子”使用標準充電寶供電。 不管怎樣,我的口袋/車上總是有一個行動電源。
- 保留一個Linux“盒子”,裡面裝有工具, 多年來以各種語言編寫 螢幕很小,控制按鈕也很少,這毫無意義。 可以在具有完整鍵盤和螢幕的普通筆記型電腦上查看/處理結果。
- 元件應該易於存取且廣為人知(可用的 SDK、許多範例和文件)。
因此,對我來說,選擇是顯而易見的 - ESP32。
對於促使我採取行動的文章中所述的所有任務,ESP32 的功能已經足夠了。 雖然我最想做的事還是:
- 玩藍牙。
- 使用最簡單的硬體(僅幅度調製,足以滿足實際需求)嘗試 433mHz 範圍。
ESP32 中的美中不足
- ESP32 SDK (IDF) 有點笨拙。
- 某些功能(例如 WiFi 堆疊)沒有以彙編靜態庫的形式提供原始程式碼。
- 不支援 5GHz 頻段,使用 WiFi 時存在一些限制和笨拙。
但價格/尺寸完全彌補了這些缺點。
軟體主要功能
我將簡要描述功能和我的看法......
管理設定並從 SD 上傳文件
所有外部控制都是透過一個簡單的網頁完成的,該網頁在單獨的選單項目中啟動。 ESP32 以 WiFi AP 模式啟動並顯示固定 IP 位址的頁面。
儘管 ESP32 核心速度相當快,但正如實驗所示,內建 Web 服務的同時運行和路由器模式等的兼容性並不是很好。 因此,沒有動態控制,而且該頁面在所有其他模式下都不可用。
此外,出於研究目的不需要動態控制。
Beacon 包的工作模式
這些模式很平庸而且不是很有趣。 「因為這是可能的」。 用於檢查。
樂鑫官方範例中有一個範例。
AP清單掃描模式。
事實上,任何智慧型手機都可以做到這一點。
那麼,在這種模式下,AP 清單將會被保存。
信標垃圾郵件發送者。
ESP32 以具有隱藏 SSID 和隨機 MAC 的 AP 啟動,並根據預先建立的 SSID 清單(手動建立或先前透過掃描 AP 清單取得)開始傳送 [訊號標訊框]
WiFi資料包嗅探模式
樂鑫開發人員增加了應用軟體透過回呼函數接收所有「空中飛行」的 WiFi 封包的功能。 其實也不是全部,因為你只能設定一個固定頻道的模式。
處理回調函數有非常嚴格的時間限制。 如果這不會對簡單的統計收集模式造成問題,那麼對於 SD 卡上的 PCAP 檔案記錄模式,我必須進行修改,透過記憶體中的佇列和信號量來組織記錄。 考慮到呼叫回呼的進程在一個核心上運行,而寫入 SD 的進程在另一個核心上運行的特殊性。
在「嘈雜的空氣」期間,一些資料包丟失(隊列中沒有空間,它們被丟棄),但在晚上公寓的典型「空氣」中(5..7 個 AP 在可見範圍內),在 PCAP 中記錄完成且不丟包。
此外,對於PCAP監控和記錄,有一種基於資料包頭中的MAC清單的過濾模式。
例如,您可以在某人進入或出現在視線中之前跟踪他在俱樂部/咖啡館中的外觀。 很少有人會停用 WiFi 和與已知 AP 的自動連線。 (我現在就把它關掉了..)
在 Wireshark 中查看記錄的流量對於理解地圖來說既具有教育意義又很有趣 - 這一切都有效。
使用 deauth 套件的模式
預設情況下,libnet80211.a 庫中禁止傳送這些包,該庫沒有原始碼。 但透過調整一些位元就可以輕鬆修復。 起初我懷疑是否值得發布補丁。 但在打開解除身份驗證幀掃描模式的情況下走遍不同的地方後,我想:“到底是什麼。” 此外,在 esp8266 中,這些包的交付不是封閉的,並且 github 上有 esp8266 的程序集。
在很多地方(我不會說在哪裡)都使用這種方法來抑制不需要的 AP。 這些不是「惡霸」......
而且我也很驚訝我的手機網路分配在某些地方不起作用...
追蹤此類資料包的數量和 RSSI 的模式對於了解「左側 AP 不喜歡的地方」非常有用。
路由器模式
這個功能可能是所有功能中最值得探索的。
ESP32 支援 STA + SoftAP 模式同時運作。 因此,您可以在其上實現經典的 NAT 路由器。
為了支援網路堆疊,Espressif 使用了 lwip 函式庫的一個分支(幾乎沒有改變)。
但是,預設情況下,在標準建置中,esp-lwip 程式庫不提供 netif 介面“ap”(SoftAP)和“st”(STA)之間的轉送。
當然,您可以在沒有 NAT 的情況下做到這一點,但是同時將兩個或多個 STA 連接到“ap”介面並將 IP 位址從“st”網路介面同步到“ap”會出現問題。 所以這個困難是不值得的,通過 NAT 會更容易。
此外,還有一個來自 martin-ger 的分支 esp-lwip,它添加了 IP4 NAT 的簡單實作。
雖然我很想純粹從外觀上重新製作它(在我看來,沒有專案分支會更容易,但透過 LWIP鉤 彙編期間定義的函數),但懶惰佔了上風,並且按原樣使用 martin-ger 的選項。
在路由器模式下,可以查看傳入和傳出的 IP4 流量。
特別是,從中提取以下內容以顯示在螢幕上並將統計資料收集到文件中:
- 連接到 SoftAP ESP32 的裝置名稱(DHCP 封包)
- 來自連接到 SoftAP ESP53 的裝置的 DNS 請求(UDP 連接埠 32)的 URL。
此外,您還可以啟用將流量記錄到 PCAP 檔案的功能。
這種模式非常有用,例如,可以了解您的手機向網路發送的內容以及它的去向。
考慮到在網路介面層級完全控制 softAP ESP32 傳入和傳出流量的能力,您可以想出其他方式來使用此模式: Ehernet header (destMAC[6]+srcMAC[6]+type[2]) +有效負載(IP4、IP6、DCHP 等類型)。
原則上,ESP32 可以很好地處理 WiFi->WiFi 路由器功能,透過正常流量,沒有任何特殊延遲。 主觀上,透過 ESP32 上的路由器連接的手機的延遲並不明顯。
不幸的是,Espressif API 無法為連接到 SoftAP EPS32 的 MAC 設定過濾器。 相反,建議對「不需要」的已連線 STA 說「再見」(esp_wifi_deauth_sta)。
必須透過 esp_wifi_deauth_sta() 呼叫來按 MAC 過濾已連線的 STA
總之
儘管我在使用 ESP32 的框架內沒有提出任何新的東西,但也許結果(原始碼)會讓某人感興趣。
我想指出的是,該程式碼僅出於教育目的而編寫。 對於「駭客攻擊」等,故意做得不太方便。
我沒有製作印刷電路板,因為用電線焊接成品圍巾需要1.5-2小時。
如果你這樣做,你需要的不是用現成的電路板來組裝它,而是用單獨的組件來組裝。 那麼尺寸會更小。
來源: www.habr.com