Arpchat - aplikasi chat yang mengirim pesan ke teman di jaringan yang sama hanya dengan ARP
(github.com/kognise)- arpchat adalah alat yang dibuat menjadi aplikasi chat dengan memanfaatkan ARP, yang digunakan komputer untuk menemukan alamat MAC komputer lain di jaringan yang sama
- Proyek ini dilatarbelakangi oleh skenario penggunaan ingin mengobrol dengan teman di jaringan dengan isolasi klien
- Dengan mengimplementasikan protokol transport serbaguna sederhana di atas ARP, aplikasi ini dapat mengirim pesan sepanjang puluhan ribu karakter dan juga menggunakan sedikit kompresi
- Memiliki sistem presence discovery dan heartbeat untuk memperbarui daftar pengguna online, beserta notifikasi saat masuk dan keluar
- Biner instalasi dapat diunduh dari releases page
- Di Windows, npcap mungkin diperlukan, dan saat instalasi perlu memilih
Install Npcap in WinPcap API-compatible Mode - Di Linux, mungkin perlu memberikan izin jaringan dengan
sudo setcap CAP_NET_RAW+ep /path/to/arpchat
- Di Windows, npcap mungkin diperlukan, dan saat instalasi perlu memilih
- Jalankan biner dari terminal; jika pesan yang dikirim muncul di layar sendiri, berarti aplikasi bekerja dengan benar
- Build telah diuji pada Rust unstable terbaru, dan untuk build Windows diperlukan WinPcap Developer's Pack serta pengaturan variabel lingkungan
LIBke folderWpdPack/Lib/x64/
1 komentar
Pendapat di Hacker News
Aku pembuatnya. Aku juga membuat hal lain yang hari ini kuunggah ke HN (https://news.ycombinator.com/item?id=37062422), jadi cukup menarik melihat ArpChat juga ikut naik. Mungkin ada yang melihat profilku
Ini benar-benar proyek yang menyenangkan, dan aku belajar banyak soal networking
Beberapa waktu lalu aku juga sempat benar-benar mencobanya di lingkungan yang sepenuhnya offline, dan itu menyenangkan. Namun setelah itu aku menemukan bug besar, dan bug ini menyebabkan latensi yang sangat besar. Sudah kuperbaiki, tetapi aku belum sempat mengunggah artefak build baru, jadi kalau ingin mengujinya di lingkungan nyata, sebaiknya build sendiri dari source. Untuk iseng, aku juga menambahkan warna nama pengguna dan waktu pesan. Aku berjanji akan segera mengunggah rilis baru
Kalau tertarik, ada juga tulisan yang kubuat sekitar setahun lalu tentang cara kerja ArpChat: https://kognise.dev/writing/arp
Semoga terus bermain-main dengan kode. Ini juga agak mirip dengan hal-hal yang ditunjukkan justine tunney dalam karya seperti https://justine.lol/ape.html. Rasanya seperti menggali sangat dalam ke area yang hanya dipahami dengan baik oleh segelintir orang, misalnya detail format biner compiler, lalu mengajukan pertanyaan gila seperti “bisakah semua format biner dirangkai menjadi satu meta-format dan benar-benar berjalan di semuanya?”, kemudian membuat sesuatu yang benar-benar berfungsi
# sudo getcap ./arpchat./arpchat cap_net_raw=epAku mendapat “error getting channel, might be missing permissions”
Tambahan: error ini berasal dari arpchat, bukan dari pengaturan
setcapInilah persis yang kuinginkan. Main-main di lapisan data link
Untuk yang tidak tahu apa itu Address Resolution Protocol (ARP), secara sangat kasar ini adalah mata rantai yang menghubungkan alamat MAC (yang dipakai Ethernet) dan alamat IP (yang dipakai internet). Jika tabel routing IP yang bisa dilihat dengan
routemenentukan alamat IP tujuan berikutnya untuk sebuah paket, cache ARP yang bisa dilihat denganarpmenentukan alamat MAC yang sesuai dengan IP tersebut. Biasanya itu adalah alamat IP lokal routerSekarang, mengetahui bahwa ARP ada saja kadang dianggap seperti pengetahuan mistis yang agak non-spesialis, apalagi saudaranya di IPv6, Neighbor Discovery Protocol. Meski dalam deployment modern berbasis cloud kita tidak sering menanganinya langsung, mengetahui keberadaannya membuat pandangan kita terhadap keseluruhan network stack jauh lebih utuh
arpingsangat berguna untuk memeriksa apakah perangkat di segmen jaringan yang sama menyala tetapi tidak merespons ICMP pingKalau melihat dump
tcpdumpatau Wireshark, cepat atau lambat pasti akan menjumpainya. Namun bagi software engineer, karena cloud dan jaringan tradisional cukup berbeda, mereka mungkin lebih dulu menemuinya saat men-debug jaringan rumah daripada aplikasiMenarik memang menyalahgunakan fakta bahwa ARP bisa membawa payload arbitrer, tetapi dari sudut pandang pengantar networking, inti yang diandalkan penulis adalah fakta sederhana bahwa switch akan membanjiri paket yang ditujukan ke
ff:ff:ff:ff:ff:ffke seluruh domain broadcastBahkan tanpa hak superuser atau izin raw packet, mengirim paket ke alamat broadcast L3 biasanya akan dibanjiri di L2, sehingga bisa membuat penyebaran pesan serupa. Dengan kata lain, melakukan ping ke alamat broadcast itu menyenangkan
Tidak ada keunggulan khusus dalam memakai ARP. Selain itu, banyak switch modern memiliki fitur untuk memantau paket ARP, jadi mengalirkan trafik ARP palsu dalam jumlah besar bisa benar-benar berdampak buruk. Meski begitu, ini karya yang menarik, dan mengingatkanku pada mainan yang kubuat saat dulu belajar. Secara pribadi, aku mungkin akan menyalahgunakan ICMP untuk tujuan ini, dan itu bisa saja menjadi arah pengembangan berikutnya. Tepuk tangan untuk proyek yang menyenangkan ini
ARP, DNS, HTTP, TLS di satu sisi adalah protokol-protokol yang kita bayangkan itu, tetapi pada saat yang sama semuanya hanyalah angka. ARP mengakses ruang angka yang sama seperti HTTP. Bukan hanya UDP yang memakai byte 11-bit, dan tidak ada instruksi CPU khusus yang hanya bisa dipakai DNS. Pada akhirnya semuanya angka. Di ujungnya, kita bisa mendorong angka yang kita inginkan ke kabel, dan seluruh dunia lainnya menerima angka itu lalu melakukan urusannya masing-masing
Sekarang seharusnya tidak berfungsi, tetapi saat itu implementasi TCP/IP yang polos—banyak di antaranya—dengan senang hati ikut berpartisipasi
Saya suka menyalahgunakan protokol yang sudah terpasang bawaan di sebagian besar sistem operasi. Karena tidak menemukan sistem messaging GUI/CLI lintas platform yang tidak memerlukan pemasangan software klien terpisah, saya pernah membuat Samba share palsu yang konyol supaya pesan bisa dilihat di Finder.app/Explorer.exe/Gnome/KDE
Memanggil netcat di jaringan lokal pun tidak berjalan mulus, dan untuk broadcast ada perbedaan flag di tiap sistem operasi. Caranya: melihat pesan di Samba share dari file browser, mengekliknya, lalu mengubah nama file untuk memperbarui “papan pesan” 3 baris
https://github.com/jedahan/samba-haiku/blob/master/index.js
Ini juga sebenarnya implementasi ulang dari sesuatu yang semula memakai SSID Wi-Fi untuk membuat haiku captive portal
https://github.com/jedahan/haiku-wifi
Ini bisa lebih menarik dari yang diperkirakan. Saya memisahkan jaringan dengan VLAN memakai hardware dari vendor besar, dan menemukan bahwa dalam kebanyakan kasus VLAN memang bekerja, tetapi trafik ARP bocor
Mesin-mesin seharusnya mengirim semua trafik melalui router, tetapi kadang melihat respons ARP yang seharusnya tidak terlihat, lalu menyimpulkan bahwa mesin lain bisa dijangkau langsung. Akibatnya, trafik tidak bisa dikirim sampai entri cache ARP kedaluwarsa, dan itu merepotkan. Vendornya terlalu besar untuk peduli, dan tidak menunjukkan minat memperbaiki bug itu
Dalam situasi tertentu, aplikasi chat ini mungkin bisa menembus VLAN
Istri, anak-anak, dan saya kebanyakan bekerja atau belajar dari rumah, jadi sering berada di kamar masing-masing. Untuk saling berkirim pesan saat perlu, kami memakai BeeBEEP. Tidak perlu server, dan tersedia klien Linux maupun Windows; itu yang menentukan
Cukup berfungsi dengan baik, tetapi setelah laptop bangun dari sleep, kadang perlu direstart agar bisa melihat lagi orang lain di LAN. Dan hampir satu-satunya keluhan saya adalah tidak bisa langsung membuka jendela pesan ke orang tertentu dari ikon tray. Bisa juga copy-paste foto kucing lucu, dan ada fitur seperti transfer file yang tidak saya pakai. Ini bukan iklan berbayar, cuma saya saja yang kepanjangan cerita
https://www.beebeep.net/
Waktu SMA saya melakukan ini dengan
net sendlalu kena marahJadi saya spoof username administrator sistem (tidak sulit di Win9x), lalu mengirim pesan peringatan keras. Dari fakta bahwa pesan-pesan tiba-tiba berhenti semua, tampaknya mereka cukup kaget
writemenyampaikan salamhttps://en.wikipedia.org/wiki/Write_(Unix)
net sendharus terhubung ke domain, jadi sepertinya tidak memakai ARPSangat keren. Namun TCP/IP tidak mengikuti model OSI, jadi sulit menerapkan begitu saja pembedaan halus ala OSI
Secara praktik, ARP bisa didefinisikan sebagai layer 2.5 dalam model TCP/IP versi Stevens, jadi menyebutnya 2.5 tampaknya paling masuk akal. Dan frame ARP tidak dirutekan, jadi jelas bukan L3
Pada masa ketika NAT IPv4 praktis menjadi standar—sebenarnya sampai sekarang juga, meski kini ada IPv6 dan CGNAT—saya pernah membuat sesuatu bernama NATChat
Pada dasarnya, ia membuat ruang chat berdasarkan alamat IPv4 publik, sehingga bisa chat dengan siapa pun di jaringan yang sama. Cukup bagus dipakai bersama orang lain di kantor. Kantor juga sesuatu yang masih ada pada masa itu
Ada juga yang serupa dalam C++: https://github.com/gbonacini/arpchatcpp