- arpchat ist ein Tool, das ARP – eigentlich dafür gedacht, dass Computer die MAC-Adressen anderer Computer im selben Netzwerk finden – zu einer Chat-App macht
- Das Projekt entstand aus dem Wunsch heraus, mit Freunden in einem Netzwerk mit Client-Isolation chatten zu können
- Es implementiert auf ARP ein einfaches universelles Transportprotokoll, mit dem sich Nachrichten mit einer Länge von mehreren zehntausend Zeichen senden lassen; außerdem wird eine gewisse Komprimierung verwendet
- Es verfügt über ein Presence Discovery- und Heartbeat-System, um die Liste der Online-Nutzer zu aktualisieren, einschließlich Benachrichtigungen über Beitritte und Verlassen
- Installations-Binärdateien gibt es auf der releases page
- Unter Windows wird möglicherweise npcap benötigt; bei der Installation muss
Install Npcap in WinPcap API-compatible Modeausgewählt werden - Unter Linux muss möglicherweise mit
sudo setcap CAP_NET_RAW+ep /path/to/arpchatdie Netzwerkberechtigung vergeben werden
- Unter Windows wird möglicherweise npcap benötigt; bei der Installation muss
- Die Binärdatei wird im Terminal ausgeführt; wenn gesendete Nachrichten auf dem eigenen Bildschirm erscheinen, kann man davon ausgehen, dass alles korrekt funktioniert
- Der Build wurde mit aktuellem unstable Rust getestet; für den Windows-Build werden das WinPcap Developer's Pack benötigt sowie die Umgebungsvariable
LIB, die auf den OrdnerWpdPack/Lib/x64/gesetzt werden muss
1 Kommentare
Meinungen auf Hacker News
Ich bin die Person, die das gebaut hat. Ich habe auch das andere Ding gebaut, das heute auf HN gepostet wurde (https://news.ycombinator.com/item?id=37062422); dass ArpChat ebenfalls hochgekommen ist, finde ich ziemlich erstaunlich. Vermutlich hat sich jemand mein Profil angesehen.
Es war ein wirklich spaßiges Projekt, und ich habe viel über Networking gelernt.
Vor Kurzem hatte ich sogar die Gelegenheit, es in einer komplett offline betriebenen Umgebung tatsächlich auszuprobieren, und das war lustig. Allerdings habe ich danach einen großen Bug gefunden, der enorme Verzögerungen verursacht hat. Ich habe ihn behoben, aber noch keine neuen Build-Artefakte hochgeladen; wenn ihr es also in einer realen Umgebung testen wollt, baut es besser direkt aus dem Source. Zum Spaß habe ich auch Farben für Benutzernamen und Nachrichtenzeiten hinzugefügt. Ich verspreche, bald ein neues Release hochzuladen.
Falls es euch interessiert: Vor etwa einem Jahr habe ich auch einen Artikel darüber geschrieben, wie ArpChat funktioniert: https://kognise.dev/writing/arp
Spiel weiter mit Code herum. Es erinnert ein wenig an das, was justine tunney mit Arbeiten wie https://justine.lol/ape.html gezeigt hat: Man gräbt sich tief in ein Gebiet ein, das nur wenige wirklich verstehen, etwa die Details von Compiler-Binärformaten, stellt dann eine verrückte Frage wie „Könnte man nicht alle Binärformate in einem Meta-Format zusammenbinden, sodass es tatsächlich überall läuft?“, und baut dann etwas, das wirklich funktioniert.
# sudo getcap ./arpchat./arpchat cap_net_raw=epIch bekomme „error getting channel, might be missing permissions“
Nachtrag: Dieser Fehler kommt nicht von der
setcap-Konfiguration, sondern von arpchat.Genau so etwas wollte ich. Spielereien auf der Data-Link-Schicht!
Für alle, die nicht wissen, was das Address Resolution Protocol (ARP) ist, sehr grob gesagt: Es ist das fehlende Bindeglied zwischen MAC-Adressen (die Ethernet verwendet) und IP-Adressen (die das Internet verwendet). Wenn die IP-Routingtabelle, die man mit
routesehen kann, festlegt, an welche IP-Adresse ein Paket als Nächstes gesendet wird, bestimmt der ARP-Cache, den man mitarpsehen kann, die zu dieser IP gehörige MAC-Adresse. Normalerweise ist das die lokale IP-Adresse des Routers.Heutzutage gilt schon das Wissen, dass ARP existiert, beinahe als esoterisches Laienwissen; beim IPv6-Verwandten Neighbor Discovery Protocol ist es noch stärker so. Auch wenn man in modernen Cloud-basierten Deployments nicht oft direkt damit zu tun hat, bekommt man durch dieses Wissen einen deutlich vollständigeren Überblick über den gesamten Netzwerk-Stack.
arpingist sehr nützlich, um zu prüfen, ob ein Gerät im selben Netzwerksegment eingeschaltet ist, aber nicht auf ICMP-Pings antwortet.Wenn man sich Dumps aus
tcpdumpoder Wireshark ansieht, begegnet man ARP früher oder später zwangsläufig. Allerdings unterscheiden sich Cloud und klassische Netzwerke stark, sodass Software Engineers damit vielleicht eher beim Debuggen ihres Heimnetzwerks in Berührung kommen als bei Anwendungen.Dass ARP beliebige Payloads enthalten kann, auszunutzen, ist witzig; aus Sicht einer Einführung ins Networking ist der Kern, auf den sich der Autor stützt, aber schlicht die Tatsache, dass ein Switch Pakete an
ff:ff:ff:ff:ff:ffüber die gesamte Broadcast-Domain flutet.Auch ohne Superuser-Rechte oder Raw-Packet-Berechtigungen kann man, wenn man Pakete an die L3-Broadcast-Adresse sendet, normalerweise Flooding auf L2 auslösen und damit eine ähnliche Nachrichtenverbreitung erreichen. Mit anderen Worten: die Broadcast-Adresse anzupingen macht Spaß.
ARP zu verwenden hat keinen besonderen Vorteil. Außerdem überwachen viele moderne Switches ARP-Pakete; große Mengen gefälschten ARP-Traffics können daher tatsächlich negative Auswirkungen haben. Trotzdem ist es eine interessante Arbeit und erinnert mich an die Spielereien, die ich gemacht habe, als ich gelernt habe. Persönlich hätte ich für diesen Zweck wohl ICMP missbraucht, und vielleicht wäre das eine künftige Entwicklungsrichtung. Applaus für dieses spaßige Projekt.
ARP, DNS, HTTP, TLS sind einerseits genau die Protokolle, an die wir denken, aber zugleich sind sie alle nur Zahlen. ARP greift auf denselben Zahlenraum zu wie HTTP. Nicht nur UDP verwendet 11-Bit-Bytes, und es gibt auch keine spezielle CPU-Instruktion, die nur DNS benutzen kann. Am Ende sind es alles Zahlen. Ganz zum Schluss kann man die gewünschten Zahlen auf die Leitung schieben, und der Rest der Welt nimmt diese Zahlen entgegen und macht jeweils das, was er eben tut.
Heute sollte das nicht mehr funktionieren, aber damals machten naive TCP/IP-Implementierungen, also ziemlich viele, bereitwillig mit.
Ich mag es, Protokolle zu missbrauchen, die in den meisten Betriebssystemen standardmäßig eingebaut sind. Weil ich kein plattformübergreifendes GUI/CLI-Messaging-System gefunden habe, das keine separate Client-Software erfordert, habe ich einmal eine alberne gefakte Samba-Freigabe gebaut, in der man Nachrichten in Finder.app/Explorer.exe/Gnome/KDE sehen konnte.
Im lokalen Netzwerk funktionierten auch
netcat-Aufrufe nicht besonders gut, und für Broadcasts gab es je nach Betriebssystem unterschiedliche Flags. Die Idee war, in einem Dateibrowser die Nachrichten in der Samba-Freigabe anzusehen und anzuklicken und dann den Dateinamen zu ändern, um ein dreizeiliges „Bulletin Board“ zu aktualisieren.https://github.com/jedahan/samba-haiku/blob/master/index.js
Auch das war ursprünglich eine Neuimplementierung von etwas, das über Wi‑Fi-SSIDs Captive-Portal-Haikus erzeugte.
https://github.com/jedahan/haiku-wifi
Es könnte unterhaltsamer sein als erwartet. Wir hatten das Netzwerk mit VLANs auf Hardware eines großen Herstellers segmentiert, und in den meisten Fällen funktionierten die VLANs, aber wir stellten fest, dass ARP-Traffic durchsickerte.
Die Maschinen sollten ihren gesamten Traffic über den Router schicken, sahen aber gelegentlich ARP-Antworten, die sie nicht sehen sollten, und schlossen daraus, dass andere Maschinen direkt erreichbar seien. Das führte dazu, dass kein Traffic gesendet werden konnte, bis der ARP-Cache-Eintrag ablief – ziemlich nervig. Der Hersteller war zu groß, als dass es ihn interessiert hätte, und zeigte auch kein Interesse an einem Bugfix.
Unter bestimmten Umständen könnte diese Chat-App also VLANs durchbrechen.
Meine Frau, die Kinder und ich arbeiten bzw. lernen größtenteils von zu Hause und sind deshalb oft jeweils in getrennten Zimmern. Um uns bei Bedarf gegenseitig Nachrichten zu schicken, verwenden wir BeeBEEP. Dass kein Server nötig ist und es sowohl einen Linux- als auch einen Windows-Client gibt, war ausschlaggebend.
Es funktioniert ziemlich gut, aber nachdem ein Laptop aus dem Energiesparmodus aufwacht, muss man es manchmal neu starten, damit die anderen Personen im LAN wieder sichtbar sind. Und dass man über das Tray-Icon nicht direkt ein Nachrichtenfenster zu einer bestimmten Person öffnen kann, ist fast mein einziger Kritikpunkt. Man kann lustige Katzenbilder kopieren und einfügen, und es gibt auch Funktionen wie Dateitransfer, die ich nicht nutze. Das ist keine bezahlte Werbung, ich rede nur ausführlich darüber.
https://www.beebeep.net/
In der Highschool habe ich das mit
net sendgemacht und Ärger bekommen.Also spoofte ich den Benutzernamen des Systemadministrators (unter Win9x war das nicht schwer) und schickte eine strenge Warnmeldung. Dass die Nachrichten danach abrupt aufhörten, deutet darauf hin, dass sie ziemlich erschrocken waren.
writelässt grüßen.https://en.wikipedia.org/wiki/Write_(Unix)
net sendmit einer Domain verbunden sein, also dürfte es wohl kein ARP verwendet haben.Sehr cool. Allerdings folgt TCP/IP nicht dem OSI-Modell, daher lassen sich die feinen OSI-Unterscheidungen nur schwer direkt darauf anwenden.
Praktisch gesehen lässt sich ARP im TCP/IP-Modell nach Stevens als Schicht 2,5 einordnen; es 2,5 zu nennen, scheint also am plausibelsten. Und da ARP-Frames nicht geroutet werden, ist es eindeutig nicht L3.
Zu Zeiten, als IPv4-NAT de facto Standard war – ist es zwar immer noch, aber heute gibt es auch IPv6 und CGNAT –, habe ich einmal etwas namens NATChat gebaut.
Im Grunde wurden Chaträume anhand der öffentlichen IPv4-Adresse erstellt, sodass man mit allen im selben Netzwerk chatten konnte. Für die Nutzung mit anderen Leuten im Büro war das ziemlich brauchbar. Büros waren damals ja auch noch etwas, das es gab.
Es gibt auch etwas Ähnliches in C++: https://github.com/gbonacini/arpchatcpp