Bermain game dengan Wifi di ESP32

Bermain game dengan Wifi di ESP32

Yang memberi saya ide untuk membuat alat saku untuk menganalisis jaringan WiFi adalah artikel ini.

Terima kasih kepada mereka atas idenya. Aku tidak ada hubungannya.

Semua pekerjaan dilakukan sebagai bagian dari hobi dengan tujuan untuk bersenang-senang dan memperluas pengetahuan saya di bidang teknologi jaringan. Pelan-pelan, 1..4 jam seminggu, sejak awal tahun ini.
Saya tidak merencanakan penggunaan praktis apa pun. Itu. Ini BUKAN alat peretas.

Saat ini, semua fungsi yang direncanakan berfungsi. Semua sumber, benar-benar siap untuk dirakit, diposting di sini. Ada juga instruksi perakitan, dll. Dalam catatan ini, saya tidak akan menduplikasi informasi yang diposting di github. Saya hanya akan memberi tahu Anda apa yang saya anggap perlu untuk dijelaskan secara terpisah.

Pendapat saya tentang “alat universal” dan alasan memilih ESP32

Saya tidak mengklaim sebagai kebenaran. Setiap orang memiliki miliknya sendiri. Saya akan mencoba membenarkan pilihan perangkat keras saya.

Diusulkan dalam artikel kasus penggunaan kombinasi Linux (awalnya Raspberry Pi) + “periferal” dalam bentuk pengontrol (STM32) + CC1110 (8051 core) dan rencana untuk menjejalkan segala kemungkinan di sana (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) sepertinya tidak cocok untuk saya. Namun, proyek ini Sepertinya ini akan tetap bersifat pribadi dan tertutup (flipper-zero github “Organisasi ini tidak memiliki repositori publik.”) dan tidak menggunakan perangkat keras yang umum.

Mungkin saya salah, dan di masa depan penulis akan membuat sumber perangkat lunak tersedia untuk umum. Namun jika tidak, maka saya tidak akan membeli perangkat keras seperti itu tanpa kode sumbernya.

Persyaratan saya untuk "alat"

Kotaknya harus kecil (semakin kecil semakin baik).

Oleh karena itu:

  • Tidak diperlukan baterai internal. Dengan arus > 100 mA saat bekerja dengan Wifi, baterai internal akan menjadi besar atau tidak bertahan lama. Oleh karena itu, biarkan “kotak” tersebut ditenagai oleh power bank standar. Pokoknya, saya selalu punya power bank di saku/mobil saya.
  • Simpan “kotak” Linux dengan alat di dalamnya, ditulis selama bertahun-tahun dalam semua bahasa Dengan layar kecil dan serangkaian tombol kontrol yang sedikit, hal ini tidak masuk akal. Hasilnya dapat dilihat/diolah di laptop biasa dengan keyboard dan layar lengkap.
  • Komponen harus mudah diakses dan dikenal luas (SDK tersedia, banyak contoh dan dokumentasi).

Hasilnya, bagi saya pilihannya jelas - ESP32.

Untuk semua tugas yang disebutkan dalam artikel yang mendorong saya untuk mengambil tindakan, kemampuan ESP32 cukup memadai. Meskipun hal yang paling ingin saya lakukan adalah:

  • Bermain-main dengan Bluetooth.
  • Bermain-main dengan rentang 433MHz dengan perangkat keras paling sederhana (hanya modulasi amplitudo, yang cukup untuk kebutuhan praktis).

Terbang dalam salep di ESP32

  • ESP32 SDK (IDF) agak kikuk.
  • Beberapa fungsi (tumpukan WiFi, misalnya) hadir tanpa kode sumber dalam bentuk perpustakaan statis yang dirakit.
  • Pita 5GHz tidak didukung dan ada beberapa keterbatasan dan kecanggungan dalam bekerja dengan WiFi.

Namun harga/ukuran sepenuhnya mengkompensasi kekurangan ini.

Fungsionalitas perangkat lunak utama

Saya akan menjelaskan secara singkat fungsi dan pendapat saya tentang...

Mengelola pengaturan dan mengunggah file dari SD

Semua kontrol eksternal dilakukan melalui halaman Web sederhana, diluncurkan dalam item menu terpisah. ESP32 dimulai dalam mode WiFi AP dan menampilkan halaman di alamat IP tetap.

Meskipun inti ESP32 cukup cepat, seperti yang ditunjukkan oleh eksperimen, pengoperasian layanan Web bawaan secara bersamaan dan, misalnya, mode router tidak terlalu kompatibel. Oleh karena itu, tidak ada kontrol dinamis dan halaman tidak tersedia di semua mode lainnya.
Selain itu, pengendalian dinamis tidak diperlukan untuk tujuan penelitian.

Mode bekerja dengan paket Beacon

Modusnya dangkal dan tidak terlalu menarik. Dibuat “karena itu mungkin”. Untuk pemeriksaan.
Ada contoh dalam contoh resmi Espressif.

Mode pemindaian daftar AP.
Sebenarnya semua smartphone bisa melakukan hal ini.
Nah, pada mode ini daftar AP akan tersimpan.
Pelaku spam suar.
ESP32 dimulai sebagai AP dengan SSID tersembunyi dan MAC acak dan mulai mengirimkan [beacon frame] sesuai dengan daftar SSID yang telah dibuat sebelumnya (dibuat secara manual atau diperoleh sebelumnya dengan memindai daftar AP)

Mode mengendus paket WiFi

Pengembang Espressif telah menambahkan kemampuan perangkat lunak aplikasi untuk menerima semua paket WiFi “terbang di udara” melalui fungsi panggilan balik. Sebenarnya tidak semua, karena Anda hanya dapat mengatur mode untuk satu saluran tetap.

Pembatasan waktu yang sangat ketat diberlakukan pada pemrosesan fungsi panggilan balik. Jika hal ini tidak menimbulkan masalah untuk mode pengumpulan statistik sederhana, maka untuk mode perekaman file PCAP pada kartu SD saya harus mengotak-atik, mengatur rekaman melalui antrian di memori dan semaphore. Mempertimbangkan kekhasan bahwa proses pemanggilan panggilan balik berjalan di satu inti, dan proses menulis ke SD di inti lain.

Selama “udara bising”, beberapa paket hilang (tidak ada ruang dalam antrian dan dibuang), tetapi dengan “udara” khas apartemen di malam hari (5..7 AP dalam jarak pandang), direkam dalam PCAP selesai tanpa kehilangan paket.

Selain itu, untuk pemantauan dan perekaman PCAP, terdapat mode pemfilteran berdasarkan daftar MAC di header paket.

Misalnya, Anda dapat melacak penampilan seseorang di klub/kafe bahkan sebelum dia masuk atau terlihat. Hanya sedikit orang yang menonaktifkan WiFi dan koneksi otomatis ke AP yang dikenal. (Saya mematikannya sekarang..)

Melihat rekaman lalu lintas di Wireshark bersifat mendidik dan menarik untuk memahami peta - semuanya berfungsi.

Mode untuk bekerja dengan paket deauth

Secara default, pengiriman paket-paket ini dilarang di perpustakaan libnet80211.a, yang datang tanpa sumber. Namun hal ini mudah untuk diperbaiki dengan mengubah beberapa bagian. Pada awalnya saya ragu apakah layak memposting patch. Namun setelah berjalan-jalan di berbagai tempat dengan mode pemindaian bingkai deautentikasi diaktifkan, saya berpikir: “apa-apaan ini.” Apalagi di esp8266 pengiriman paket ini tidak ditutup dan ada build di github untuk esp8266.

Di banyak tempat (saya tidak akan menyebutkan di mana) penindasan terhadap AP yang tidak diinginkan melalui metode ini digunakan. Dan mereka bukanlah “pengganggu”...

Dan saya juga terkejut bahwa distribusi Internet dari ponsel saya tidak berfungsi di beberapa tempat...

Mode untuk melacak nomor dan RSSI paket tersebut sangat berguna untuk memahami “di mana AP kiri tidak menyukainya.”

modus router

Fitur ini mungkin yang paling menarik untuk dijelajahi.

ESP32 mendukung operasi simultan dalam mode STA + SoftAP. Oleh karena itu, Anda dapat mengimplementasikan router NAT klasik di dalamnya.

Untuk mendukung tumpukan jaringan, Espressif menggunakan fork (hampir tidak berubah) dari perpustakaan lwip.

Namun, secara default, dalam build standar, pustaka esp-lwip tidak menyediakan penerusan antara antarmuka netif 'ap' (SoftAP) dan 'st' (STA).

Tentu saja, Anda dapat melakukannya tanpa NAT, tetapi ada masalah dengan menghubungkan dua atau lebih STA ke antarmuka 'ap' secara bersamaan dan menyinkronkan alamat IP dari antarmuka jaringan 'st' ke 'ap'. Jadi kesulitannya tidak sepadan dan lebih mudah melalui NAT.

Selain itu, ada fork esp-lwip dari martin-ger, yang menambahkan implementasi sederhana NAT untuk IP4.

Walaupun tangan saya gatal untuk membuatnya kembali secara kosmetik (menurut saya, lebih mudah tanpa proyek fork, tetapi melalui LWIPHOOK fungsi yang ditentukan selama perakitan), tetapi kemalasan menguasai dan opsi dari martin-ger digunakan apa adanya.

Dalam mode router, lalu lintas IP4 masuk dan keluar dilihat.

Secara khusus, berikut ini diekstraksi darinya untuk ditampilkan di layar dan mengumpulkan statistik ke dalam file:

  • Nama perangkat yang terhubung ke SoftAP ESP32 (paket DHCP)
  • URL dari permintaan DNS (UDP port 53) dari perangkat yang terhubung ke SoftAP ESP32.

Selain itu, Anda dapat mengaktifkan perekaman lalu lintas ke file PCAP.

Mode ini sangat berguna, misalnya untuk memahami, misalnya, apa yang dikirim ponsel Anda ke jaringan dan ke mana perginya.

Anda dapat memikirkan cara lain untuk menggunakan mode ini, dengan mempertimbangkan kemampuan untuk sepenuhnya mengontrol lalu lintas perangkat lunak SoftAP ESP32 yang masuk dan keluar pada tingkat antarmuka jaringan: Header Ehernet (destMAC[6]+srcMAC[6]+type[2]) + muatan (tipe IP4, IP6, DCHP, dll.).

Pada prinsipnya, ESP32 mampu mengatasi fungsi router WiFi->WiFi dengan cukup baik, melewati lalu lintas normal tanpa penundaan. Secara subyektif, penundaan pada telepon yang terhubung melalui router pada ESP32 tidak terlihat.

Sayangnya, Espressif API tidak memiliki kemampuan untuk mengatur filter untuk MAC yang terhubung ke SoftAP EPS32. Sebaliknya, diusulkan untuk mengucapkan “selamat tinggal” (esp_wifi_deauth_sta) kepada STA yang sudah terhubung yang “tidak diinginkan”.

Pemfilteran berdasarkan MAC untuk STA yang terhubung harus dilakukan melalui panggilan esp_wifi_deauth_sta()

Sebagai kesimpulan

Meskipun saya tidak menemukan sesuatu yang baru sebagai bagian dari bekerja dengan ESP32, mungkin hasilnya (kode sumber) akan menarik bagi seseorang.

Saya ingin mencatat bahwa kode tersebut ditulis semata-mata untuk tujuan pendidikan. Untuk “hacking”, dll, sengaja dibuat tidak terlalu nyaman.

Saya tidak membuat papan sirkuit tercetak karena butuh 1.5-2 jam untuk menyolder syal yang sudah jadi dengan kawat.

Dan jika ya, Anda perlu merakitnya bukan dari papan yang sudah jadi, tetapi dari komponen individual. Maka dimensinya akan semakin kecil.

Sumber: www.habr.com

Tambah komentar