Permainan dengan Wifi pada ESP32

Permainan dengan Wifi pada ESP32

Apa yang memberi saya idea untuk membuat alat poket untuk menganalisis rangkaian WiFi ialah artikel ini.

Terima kasih kepada mereka untuk idea itu. Saya tidak mempunyai apa-apa untuk dilakukan.

Semua kerja dilakukan sebagai sebahagian daripada hobi untuk tujuan berseronok dan mengembangkan pengetahuan saya dalam bidang teknologi rangkaian. Perlahan-lahan, 1..4 jam seminggu, sejak awal tahun ini.
Saya tidak merancang sebarang penggunaan praktikal. Itu. Ini BUKAN alat penggodam.

Pada masa ini, semua fungsi yang dirancang berfungsi. Semua sumber, sedia sepenuhnya untuk pemasangan, disiarkan di sini. Terdapat juga arahan pemasangan, dsb. Dalam nota ini, saya tidak akan menduplikasi maklumat yang disiarkan di github. Saya hanya akan memberitahu anda apa yang saya anggap perlu untuk menerangkan secara berasingan.

Pendapat saya tentang "alat universal" dan sebab memilih ESP32

Saya tidak mengaku sebagai kebenaran. Setiap orang ada sendiri. Saya akan cuba mewajarkan pilihan perkakasan saya.

Dicadangkan dalam artikel kes penggunaan gabungan Linux (pada mulanya Raspberry Pi) + "periferal" dalam bentuk pengawal (STM32) + CC1110 (teras 8051) dan rancangan untuk menjejalkan segala yang mungkin di sana (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) nampaknya tidak sesuai untuk saya. Walau bagaimanapun, projek ini Nampaknya ia akan kekal tertutup dan tertutup (github sifar-flipper "Organisasi ini tidak mempunyai repositori awam.") dan pergi ke perkakasan yang tidak begitu biasa.

Mungkin saya salah, dan pada masa hadapan pengarang akan menjadikan sumber perisian tersedia secara terbuka. Tetapi jika tidak, maka saya tidak akan membeli perkakasan sedemikian tanpa kod sumber.

Keperluan saya untuk "alat"

Kotak hendaklah kecil (lebih kecil lebih baik).

Oleh itu:

  • Tiada bateri terbina dalam diperlukan. Dengan arus > 100 mA apabila bekerja dengan Wifi, bateri terbina dalam sama ada besar atau tidak tahan lama. Oleh itu, biarkan "kotak" dikuasakan oleh bank kuasa standard. Bagaimanapun, saya sentiasa mempunyai bank kuasa dalam poket/kereta saya.
  • Simpan "kotak" Linux dengan alatan di dalamnya, ditulis selama bertahun-tahun dalam semua bahasa Dengan skrin kecil dan set butang kawalan yang sedikit, ia tidak masuk akal. Hasilnya boleh dilihat/diproses pada komputer riba biasa dengan papan kekunci dan skrin penuh.
  • Komponen harus mudah diakses dan diketahui secara meluas (SDK tersedia, banyak contoh dan dokumentasi).

Akibatnya, bagi saya, pilihannya jelas - ESP32.

Untuk semua tugas yang dinyatakan dalam artikel yang mendorong saya untuk mengambil tindakan, keupayaan ESP32 cukup mencukupi. Walaupun perkara yang paling saya mahu lakukan ialah:

  • Main-main dengan Bluetooth.
  • Main-main dengan julat 433mHz dengan perkakasan paling ringkas (hanya modulasi amplitud, yang cukup untuk keperluan praktikal).

Terbang dalam salap dalam ESP32

  • ESP32 SDK (IDF) agak kekok.
  • Sesetengah fungsi (timbunan WiFi, contohnya) datang tanpa kod sumber dalam bentuk perpustakaan statik yang dipasang.
  • Jalur 5gHz tidak disokong dan terdapat beberapa batasan dan kekok dalam bekerja dengan WiFi.

Tetapi harga/saiz sepenuhnya mengimbangi kekurangan ini.

Fungsi perisian utama

Saya akan menerangkan secara ringkas fungsi dan pendapat saya tentang...

Mengurus tetapan dan memuat naik fail daripada SD

Semua kawalan luaran dilakukan melalui halaman Web ringkas, dilancarkan dalam item menu berasingan. ESP32 bermula dalam mod AP WiFi dan memaparkan halaman pada alamat IP tetap.

Walaupun teras ESP32 agak pantas, seperti yang ditunjukkan oleh eksperimen, operasi serentak perkhidmatan Web terbina dalam dan, sebagai contoh, mod penghala tidak begitu serasi. Oleh itu, tiada kawalan dinamik dan halaman tidak tersedia dalam semua mod lain.
Selain itu, kawalan dinamik tidak diperlukan untuk tujuan penyelidikan.

Mod bekerja dengan pakej Beacon

Mod adalah cetek dan tidak begitu menarik. Dibuat "kerana ia mungkin." Untuk cek.
Terdapat contoh dalam contoh Espressif rasmi.

Mod pengimbasan senarai AP.
Sebenarnya, mana-mana telefon pintar boleh melakukan ini.
Nah, dalam mod ini senarai AP akan disimpan.
Penghancur suar.
ESP32 bermula sebagai AP dengan SSID tersembunyi dan MAC rawak dan mula menghantar [bingkai suar] mengikut senarai SSID yang telah dibuat sebelumnya (dibuat secara manual atau diperoleh lebih awal dengan mengimbas senarai AP)

Mod menghidu paket WiFi

Pembangun espressif telah menambah keupayaan perisian aplikasi untuk menerima semua paket WiFi "terbang di udara" melalui fungsi panggil balik. Sebenarnya bukan semua, kerana anda hanya boleh menetapkan mod untuk satu saluran tetap.

Sekatan masa yang sangat ketat dikenakan ke atas memproses fungsi panggil balik. Jika ini tidak menyebabkan masalah untuk mod pengumpulan statistik mudah, maka untuk mod rakaman fail PCAP pada kad SD saya terpaksa bermain-main, mengatur rakaman melalui baris gilir dalam memori dan semaphore. Mengambil kira keanehan bahawa proses memanggil panggilan balik berjalan pada satu teras, dan proses yang menulis ke SD dalam yang lain.

Semasa "udara bising", beberapa paket hilang (tiada ruang dalam baris gilir dan ia dibuang), tetapi dengan "udara" biasa apartmen pada waktu petang (5..7 AP dalam jarak penglihatan), rakaman dalam PCAP selesai tanpa kehilangan paket.

Selain itu, untuk pemantauan dan rakaman PCAP, terdapat mod penapisan berdasarkan senarai MAC dalam pengepala paket.

Sebagai contoh, anda boleh menjejaki penampilan seseorang di kelab/kafe sebelum dia masuk atau muncul di hadapan mata. Beberapa orang melumpuhkan sambungan WiFi dan automatik ke AP yang diketahui. (Saya sedang mematikannya sekarang..)

Melihat trafik yang dirakam dalam Wireshark adalah mendidik dan menarik untuk memahami peta - semuanya berfungsi.

Mod untuk bekerja dengan pakej kematian

Secara lalai, penghantaran pakej ini adalah dilarang dalam perpustakaan libnet80211.a, yang datang tanpa sumber. Tetapi ia mudah untuk diperbaiki dengan mengubah beberapa bit. Pada mulanya saya meragui sama ada ia berbaloi untuk menyiarkan tampalan. Tetapi selepas berjalan di sekitar tempat yang berbeza dengan mod pengimbasan bingkai deauthentication dihidupkan, saya berfikir: "apa kejadahnya." Selain itu, dalam esp8266 penghantaran pakej ini tidak ditutup dan terdapat pemasangan di github untuk esp8266.

Di banyak tempat (saya tidak akan menyatakan di mana) penindasan AP yang tidak diingini melalui kaedah ini digunakan. Dan ini bukan "pembuli"...

Dan saya juga terkejut bahawa pengedaran Internet saya dari telefon saya tidak berfungsi di beberapa tempat...

Mod untuk menjejak nombor dan RSSI bagi paket sedemikian sangat berguna untuk memahami "di mana AP kiri tidak menyukainya."

mod penghala

Ciri ini mungkin yang paling menarik untuk diterokai.

ESP32 menyokong operasi serentak dalam mod STA + SoftAP. Oleh itu, anda boleh melaksanakan penghala NAT klasik padanya.

Untuk menyokong timbunan rangkaian, Espressif menggunakan garpu (hampir tidak berubah) pustaka lwip.

Tetapi, secara lalai, dalam binaan standard, perpustakaan esp-lwip tidak menyediakan pemajuan antara antara muka netif 'ap' (SoftAP) dan 'st' (STA).

Sudah tentu, anda boleh melakukannya tanpa NAT, tetapi terdapat masalah dengan menyambung secara serentak dua atau lebih STA ke antara muka 'ap' dan menyegerakkan alamat IP dari antara muka rangkaian 'st' ke 'ap'. Jadi kesukaran itu tidak berbaloi dan lebih mudah melalui NAT.

Selain itu, terdapat garpu esp-lwip dari martin-ger, yang menambah pelaksanaan NAT yang mudah untuk IP4.

Walaupun tangan saya gatal untuk membuat semula secara kosmetik semata-mata (pada pendapat saya, ia lebih mudah tanpa garpu projek, tetapi melalui LWIPHOOK fungsi yang ditakrifkan semasa pemasangan), tetapi kemalasan berlaku dan pilihan daripada martin-ger digunakan sebagaimana adanya.

Dalam mod penghala, trafik IP4 masuk dan keluar dilihat.

Khususnya, perkara berikut diekstrak daripadanya untuk dipaparkan pada skrin dan mengumpul statistik ke dalam fail:

  • Nama peranti yang disambungkan ke SoftAP ESP32 (paket DHCP)
  • URL daripada permintaan DNS (port UDP 53) daripada peranti yang disambungkan ke SoftAP ESP32.

Selain itu, anda boleh mendayakan rakaman trafik ke fail PCAP.

Mod ini sangat berguna, contohnya, untuk memahami, contohnya, perkara yang dihantar oleh telefon anda ke rangkaian dan ke mana ia pergi.

Anda boleh memikirkan cara lain untuk menggunakan mod ini, dengan mengambil kira keupayaan untuk mengawal sepenuhnya trafik masuk dan keluar softAP ESP32 pada tahap antara muka rangkaian: Pengepala Ehernet (destMAC[6]+srcMAC[6]+type[2]) + muatan (jenis IP4, IP6, DCHP, dll.).

Pada dasarnya, ESP32 mengatasi dengan baik dengan fungsi penghala WiFi->WiFi, melalui trafik biasa tanpa sebarang kelewatan khas. Secara subjektif, kelewatan dalam telefon yang disambungkan melalui penghala pada ESP32 tidak dapat dilihat.

Malangnya, API Espressif tidak mempunyai keupayaan untuk menetapkan penapis untuk MAC yang disambungkan kepada SoftAP EPS32. Sebaliknya, dicadangkan untuk mengucapkan "selamat tinggal" (esp_wifi_deauth_sta) kepada STA yang telah disambungkan yang "tidak diingini".

Penapisan oleh MAC untuk STA yang disambungkan perlu dilakukan melalui panggilan esp_wifi_deauth_sta()

Kesimpulannya

Walaupun saya tidak menghasilkan sesuatu yang baharu dalam rangka kerja dengan ESP32, mungkin hasilnya (kod sumber) akan menarik minat seseorang.

Saya ingin ambil perhatian bahawa kod itu ditulis semata-mata untuk tujuan pendidikan. Untuk "penggodaman", dll., ia sengaja dibuat tidak begitu mudah.

Saya tidak membuat papan litar bercetak kerana ia mengambil masa 1.5-2 jam untuk menyolder selendang siap dengan wayar.

Dan jika anda melakukannya, anda perlu memasangnya bukan dari papan siap pakai, tetapi dari komponen individu. Kemudian dimensi akan menjadi lebih kecil.

Sumber: www.habr.com

Tambah komen