4 Punkte von GN⁺ 2023-08-11 | 1 Kommentare | Auf WhatsApp teilen
  • 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 Mode ausgewählt werden
    • Unter Linux muss möglicherweise mit sudo setcap CAP_NET_RAW+ep /path/to/arpchat die Netzwerkberechtigung vergeben werden
  • 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 Ordner WpdPack/Lib/x64/ gesetzt werden muss

1 Kommentare

 
GN⁺ 2023-08-11
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

    • Ich grinse die ganze Zeit, während ich mir das ansehe. ArpChat hat großes Potenzial, Netzwerkadministratoren einen Herzinfarkt zu bescheren, aber die Idee an sich ist wirklich großartig. Ich gehöre auch zu der Sorte Leute, die zum Spaß Bücher über die OSI-Schichten gelesen haben, daher kann ich das gut nachvollziehen.
      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.
    • Das Banner am Ende der README ist wirklich witzig und schön. Tolle Arbeit.
    • Erwartest du, dass es auch unter Linux funktioniert?
      # sudo getcap ./arpchat
      ./arpchat cap_net_raw=ep
      Ich 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 route sehen kann, festlegt, an welche IP-Adresse ein Paket als Nächstes gesendet wird, bestimmt der ARP-Cache, den man mit arp sehen 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.

    • Dass ARP obskures Wissen sei, sehe ich nicht so. Für Menschen, die mit Netzwerken arbeiten, ist es weiterhin fast unerlässlich, ARP zu verstehen oder zumindest zu kennen. arping ist 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 tcpdump oder 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.
    • Heutzutage ist es wohl häufiger 802.11. Trotzdem kann ARP in jedem Data-Link-Layer-Protokoll verwendet werden, wenn ein Host eine IP bekommen muss: https://en.wikipedia.org/wiki/Data_link_layer
    • Falls ARP wirklich fremd wird, wäre das schade. Es ist schwer vorstellbar, zu behaupten, man verstehe, wie IP-Netzwerke funktionieren, ohne wenigstens grundlegend mit ARP vertraut zu sein.
    • Man kann auch die ARP-Einträge anderer Computer im Netzwerk mit statischer IP-Adresse hartcodieren.
  • 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.

    • Es nutzt auch ein weiteres wichtiges Grundprinzip für Networking-Einsteiger: Am Ende ist alles Zahlen.
      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.
    • Einer der ersten Amplification-DDoS-Angriffe, die ich gesehen habe, war in den 1990ern: Dabei wurde die Adresse des Opfer-Hosts als Quelle gefälscht und dann ein Ping an die Broadcast-Adresse eines naiven Campusnetzwerks geschickt.
      Heute sollte das nicht mehr funktionieren, aber damals machten naive TCP/IP-Implementierungen, also ziemlich viele, bereitwillig mit.
    • Meinst du https://hpbn.co/?
  • 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.

    • Aus demselben Grund interessant: Wenn man ARP-Nachrichten mit beliebiger Payload senden und empfangen kann, würde das VLAN-Troubleshooting oder andere L2-Konnektivitätsprüfungen definitiv einfacher machen.
    • Nach meinen Tests kann man damit ziemlich viel durchdringen.
  • 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/

    • Die Schönheit dieses Projekts liegt meiner Meinung nach nicht im Messaging selbst, sondern darin, ein Low-Level-Netzwerkprotokoll zu missbrauchen, um aus Dingen wie Client-Isolation auszubrechen.
  • In der Highschool habe ich das mit net send gemacht und Ärger bekommen.

    • Ich hatte den Trick gefunden und ein paar Freunden gezeigt, aber das Geheimnis hielt nicht lange. Plötzlich benutzte ihn eine größere Gruppe von Leuten, die nicht einmal meine Freunde waren, im Computerraum-Unterricht zum Schummeln. Das offenkundige Schummeln störte mich, und es ärgerte mich auch ein wenig, dass Leute, die ich nicht besonders mochte, von etwas profitierten, das ich entdeckt hatte.
      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.
    • write lässt grüßen.
      https://en.wikipedia.org/wiki/Write_(Unix)
    • Soweit ich mich erinnere, musste net send mit einer Domain verbunden sein, also dürfte es wohl kein ARP verwendet haben.
    • Wenn der Netzwerkanalysator falsch lag oder sich nicht für seltsame ARP-Pakete interessierte, wäre ARP-Messaging vermutlich schwer zu erkennen gewesen.
    • Das waren noch Zeiten. An der Uni schickten wir versehentlich – nein, absichtlich – eine Nachricht an die gesamte Domain, und die IT-Lehrer schauten sofort zu uns Problemkindern herüber.
  • 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