在 ESP32 上使用 Wifi 進行遊戲

在 ESP32 上使用 Wifi 進行遊戲

是什麼讓我產生了製作一個用於分析 WiFi 網路的袖珍工具的想法 本文.

感謝他們的想法。 我只是無事可做。

所有工作都是作為愛好的一部分完成的,目的是為了獲得樂趣並擴展我在網路技術領域的知識。 從今年年初開始,慢慢地,每週 1..4 小時。
我沒有計劃任何實際用途。 那些。 這不是駭客工具。

目前,所有計劃的功能都正在運作。 所有來源,完全準備好組裝, 發佈在這裡。 還有組裝說明等,在這篇筆記中,我不會重複github上發布的資訊。 我只會告訴你我認為有必要單獨描述的內容。

我對「萬能工具」的看法以及選擇ESP32的原因

我並不聲稱自己是事實。 每個人都有自己的。 我將嘗試證明我選擇的硬體的合理性。

文章中提出 Linux(最初是 Raspberry Pi)+控制器(STM32)+ CC1110(8051 核心)形式的「週邊設備」組合的用例,以及將所有可能的東西塞進其中的計劃(125kHz、NFC、433mHz、USB、 iButton 、藍牙、?)似乎不適合我。 然而, 這個項目 看起來它將保持私有和封閉(flipper-zero github「這個組織沒有公共儲存庫。」)並轉向不太常見的硬體。

也許我錯了,將來作者將公開軟體來源。 但如果沒有,那麼我就不會購買這樣一個沒有原始碼的硬體。

我對「工具」的要求

盒子應該小(越小越好)。

這就是為什麼:

  • 無需內建電池。 使用 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

添加評論