ESP32'de Wifi ile Oyun Oynamak

ESP32'de Wifi ile Oyun Oynamak

WiFi ağlarını analiz etmek için bana bir cep aracı yapma fikrini veren şey şuydu: bu makale.

Fikir için kendilerine teşekkür ederiz. Yapacak hiçbir şeyim yoktu.

Tüm çalışmalar hobi olarak eğlenmek ve ağ teknolojileri alanında bilgimi genişletmek amacıyla yapıldı. Yavaş yavaş, bu yılın başından bu yana haftada 1..4 saat.
Herhangi bir pratik kullanım planlamadım. Onlar. Bu bir bilgisayar korsanının aracı DEĞİLDİR.

Şu anda planlanan tüm işlevler çalışıyor. Tüm kaynaklar montaja tamamen hazır, burada yayınlandı. Ayrıca montaj talimatları vb. de var. Bu notta github'da yayınlanan bilgileri kopyalamayacağım. Size yalnızca ayrı ayrı açıklamanın gerekli olduğunu düşündüğüm şeyleri anlatacağım.

“Evrensel alet” hakkındaki fikrim ve ESP32'yi seçmemin nedeni

Ben gerçek olduğumu iddia etmiyorum. Herkesin kendine ait. Donanım seçimimi haklı çıkarmaya çalışacağım.

Makalede önerilen Linux (başlangıçta Raspberry Pi) + “çevre birimlerinin” denetleyici (STM32) + CC1110 (8051 çekirdek) biçimindeki bir kombinasyonunun kullanım durumu ve mümkün olan her şeyi buraya sıkıştırma planı (125kHz, NFC, 433mHz, USB, iButton, bluetooth,?) bana pek uygun gelmedi. Fakat, bu proje Görünüşe göre özel ve kapalı kalacak (flipper-zero github "Bu organizasyonun halka açık deposu yok.") ve pek yaygın olmayan donanımlara yöneldi.

Belki yanılıyorum ve gelecekte yazarlar yazılım kaynaklarını kamuya açık hale getirecekler. Ancak öyle olmasaydı kaynak kodu olmadan böyle bir donanım satın almazdım.

"Araç" için gereksinimlerim

Kutu küçük olmalıdır (ne kadar küçükse o kadar iyidir).

Bu yüzden:

  • Dahili pile gerek yoktur. Wifi ile çalışırken> 100 mA akımla, dahili pil ya büyük olacak ya da uzun süre dayanmayacaktır. Bu nedenle, "kutunun" standart bir güç bankası tarafından çalıştırılmasına izin verin. Neyse, cebimde/arabamda her zaman bir taşınabilir şarj cihazı bulunur.
  • İçinde araçların bulunduğu bir Linux “kutusu” tutun, uzun yıllar boyunca her dilde yazılmıştır Küçük bir ekran ve yetersiz kontrol düğmeleri seti ile hiçbir anlam ifade etmiyor. Sonuçlar, tam klavye ve ekrana sahip normal bir dizüstü bilgisayarda görüntülenebilir/işlenebilir.
  • Bileşenler kolayca erişilebilir olmalı ve yaygın olarak bilinmelidir (mevcut SDK, birçok örnek ve belge).

Sonuç olarak benim için seçim açıktı - ESP32.

Beni harekete geçmeye sevk eden yazıda belirtilen tüm görevler için ESP32'nin yetenekleri oldukça yeterli. Her ne kadar hala yapmak istediğim en çok şey olsa da:

  • Bluetooth ile oynayın.
  • En basit donanımla (yalnızca pratik ihtiyaçlar için yeterli olan genlik modülasyonu) 433 mHz aralığıyla oynayın.

ESP32'deki merhemde uçun

  • ESP32 SDK (IDF) biraz hantaldır.
  • Bazı işlevler (örneğin WiFi yığını), birleştirilmiş statik kitaplıklar biçiminde kaynak kodu olmadan gelir.
  • 5gHz bandı desteklenmiyor ve WiFi ile çalışırken bazı sınırlamalar ve sakarlıklar var.

Ancak fiyat/boyut bu eksiklikleri tamamen telafi ediyor.

Ana yazılım işlevselliği

İşlevselliği ve hakkındaki görüşlerimi kısaca anlatacağım...

Ayarları yönetme ve SD'den dosya yükleme

Tüm harici kontroller, ayrı bir menü öğesiyle başlatılan basit bir Web sayfası aracılığıyla yapılır. ESP32, WiFi AP modunda başlar ve sabit bir IP adresinde bir sayfa görüntüler.

Deneylerin gösterdiği gibi ESP32 çekirdekleri oldukça hızlı olmasına rağmen, yerleşik Web hizmetinin ve örneğin yönlendirici modunun eşzamanlı çalışması pek uyumlu değildir. Bu nedenle dinamik kontrol yoktur ve sayfa diğer tüm modlarda mevcut değildir.
Ayrıca araştırma amacıyla dinamik kontrole gerek yoktur.

Beacon paketleriyle çalışma modu

Modlar banal ve pek ilgi çekici değil. "Çünkü mümkün" yapıldı. Kontrol için.
Resmi Espressif örneklerinde örnekler var.

AP listesi tarama modu.
Aslında bunu herhangi bir akıllı telefon yapabilir.
Bu modda AP listesi kaydedilecektir.
İşaret spamcısı.
ESP32, gizli bir SSID'ye ve rastgele bir MAC'a sahip bir AP olarak başlar ve önceden oluşturulmuş bir SSID listesine göre (manuel olarak oluşturulmuş veya daha önce AP listesini tarayarak elde edilmiş) [işaret çerçevesi] göndermeye başlar.

WiFi paket koklama modu

Espressif geliştiricileri, uygulama yazılımının geri arama işlevi aracılığıyla "havada uçan" tüm WiFi paketlerini alma yeteneğini ekledi. Aslında hepsi değil, çünkü modu yalnızca tek bir sabit kanal için ayarlayabilirsiniz.

Bir geri arama işlevinin işlenmesinde çok katı zaman kısıtlamaları uygulanır. Bu, basit istatistik toplama modunda sorunlara neden olmazsa, o zaman SD karttaki PCAP dosya kayıt modu için, kaydı bellekteki ve semaforlardaki bir kuyruk aracılığıyla düzenleyerek düzeltmem gerekiyordu. Geri aramayı çağıran sürecin bir çekirdekte, SD'ye yazan sürecin ise başka bir çekirdekte çalışması özelliği dikkate alındığında.

"Gürültülü hava" sırasında bazı paketler kaybolur (sırada yer kalmaz ve atılırlar), ancak akşamları bir apartman dairesinin tipik "havası" ile (görünürlük dahilinde 5..7 AP), PCAP'ye kayıt paket kaybı olmadan tamamlanır.

Ek olarak PCAP izleme ve kaydetme için paket başlıklarındaki MAC listesine dayalı bir filtreleme modu vardır.

Örneğin, bir kişinin bir kulübe/kafeye girmeden veya görünmeden önce o mekandaki görünümünü takip edebilirsiniz. Çok az kişi WiFi'yi ve bilinen AP'lere otomatik bağlantıları devre dışı bırakıyor. (Şimdi kapatıyorum..)

Wireshark'ta kayıtlı trafiği görüntülemek eğitici ve haritaları anlamak açısından ilgi çekicidir; hepsi işe yarar.

Ölüm paketleriyle çalışma modu

Kaynaklar olmadan gelen libnet80211.a kütüphanesinde bu paketlerin gönderilmesi varsayılan olarak yasaktır. Ancak birkaç parçayı değiştirerek düzeltmek kolaydır. İlk başta yama göndermeye değip değmeyeceğinden şüphe ettim. Ancak kimlik doğrulama çerçevesi tarama modu açıkken farklı yerlerde dolaştıktan sonra şunu düşündüm: "ne oluyor?" Üstelik esp8266'da bu paketlerin teslimatı kapalı değil ve github'da esp8266 için derlemeler var.

Birçok yerde (nerede olduğunu söylemeyeceğim) istenmeyen AP'lerin bu yöntemle bastırılması kullanılıyor. Ve bunlar "zorba" değil...

Ayrıca telefonumdan internet dağıtımımın bazı yerlerde çalışmamasına da şaşırdım...

Bu tür paketlerin sayısını ve RSSI'sini takip etme modu, "sol AP'lerin bundan hoşlanmadığı yeri" anlamak için çok faydalıdır.

yönlendirici modu

Bu özellik muhtemelen keşfedilecek en ilginç özelliktir.

ESP32, STA + SoftAP modunda eşzamanlı çalışmayı destekler. Bu nedenle, üzerine klasik bir NAT yönlendirici uygulayabilirsiniz.

Ağ yığınını desteklemek için Espressif, lwip kütüphanesinin (neredeyse hiç değişmemiş) bir çatalını kullanır.

Ancak varsayılan olarak standart yapıda esp-lwip kütüphanesi 'ap' (SoftAP) ve 'st' (STA) netif arayüzleri arasında iletim sağlamaz.

Elbette bunu NAT olmadan da yapabilirsiniz, ancak iki veya daha fazla STA'nın aynı anda 'ap' arayüzüne bağlanması ve IP adreslerinin 'st' ağ arayüzünden 'ap' ile senkronize edilmesinde bir sorun vardır. Yani zorluklara değmez ve NAT sayesinde daha kolaydır.

Ayrıca, Martin-ger'den IP4 için basit bir NAT uygulaması ekleyen bir esp-lwip çatalı da bulunmaktadır.

Her ne kadar ellerim onu ​​tamamen kozmetik olarak yeniden yapmak için kaşınıyor olsa da (bence proje çatallanmadan daha kolaydı, ancak LWIP aracılığıyla)KANCA işlevler montaj sırasında tanımlanır), ancak tembellik hakim oldu ve martinger seçeneği olduğu gibi kullanıldı.

Yönlendirici modunda gelen ve giden IP4 trafiği görüntülenir.

Özellikle, ekranda görüntülemek ve istatistikleri bir dosyada toplamak için aşağıdakiler çıkarılır:

  • SoftAP ESP32'ye (DHCP paketleri) bağlanan cihazın adı
  • SoftAP ESP53'ye bağlı bir cihazdan gelen DNS isteklerinin (UDP bağlantı noktası 32) URL'si.

Ek olarak, bir PCAP dosyasına trafik kaydını etkinleştirebilirsiniz.

Bu mod, örneğin telefonunuzun şebekeye ne gönderdiğini ve nereye gittiğini anlamak için çok kullanışlıdır.

SoftAP ESP32 gelen ve giden trafiği ağ arayüzü düzeyinde tamamen kontrol etme yeteneğini dikkate alarak bu modu kullanmanın başka yollarını düşünebilirsiniz: Ehernet başlığı (destMAC[6]+srcMAC[6]+type[2]) + yük (IP4, IP6, DCHP vb. türü).

Prensip olarak ESP32, WiFi->WiFi yönlendirici işleviyle oldukça iyi başa çıkıyor ve normal trafikten herhangi bir özel gecikme olmadan geçiyor. Öznel olarak, ESP32'deki yönlendirici aracılığıyla bağlanan telefondaki gecikmeler fark edilmiyor.

Maalesef Espressif API'nin SoftAP EPS32'ye bağlı MAC için filtre ayarlama özelliği yoktur. Bunun yerine, zaten bağlı olan ve "istenmeyen" STA'lara "hoşçakal" (esp_wifi_deauth_sta) denmesi öneriliyor.

Bağlı STA'lar için MAC'e göre filtrelemenin esp_wifi_deauth_sta() çağrısı aracılığıyla yapılması gerekiyordu

Sonuç olarak

ESP32 ile çalışma çerçevesinde yeni bir şey bulmamış olsam da, belki sonuç (kaynak kodu) birisinin ilgisini çekecektir.

Kodun yalnızca eğitim amaçlı yazıldığını belirtmek isterim. "Hackleme" vb. için kasıtlı olarak pek uygun hale getirilmedi.

Bitmiş eşarpları tel ile lehimlemek 1.5-2 saat sürdüğü için baskılı devre kartı yapmadım.

Ve bunu yaparsanız, onu hazır panolardan değil, bireysel bileşenlerden birleştirmeniz gerekir. O zaman boyutlar daha da küçük olacaktır.

Kaynak: habr.com

Yorum ekle