Wie erstelle ich ein UDP-Paket?


15

Wenn ich den folgenden Netcat-Befehl ausführe und die Pakete mit Wireshark anzeige , wird angezeigt , dass das UDP-Paket fehlerhaft ist.

$ echo "this is a test" | nc -u 127.0.0.1 53

Ebenso führen Befehle wie $ echo "this is a test" > /dev/udp/127.0.0.1/53"fehlerhaftes Paket" in Wireshark zu Fehlern.

Geben Sie hier eine Bildbeschreibung ein

Der Echo-Befehl wird ohne Fehler an den Netcat-Server gesendet / gesendet. Aber das hat mich gefragt: Ist es möglich, manuell ein richtiges UDP-Paket mit Echo oder einem anderen nativen Unix-Tool zu erstellen?

Ich benutze Debian und macOS.


10
Laut Ihrem Screenshot ist nicht das udp-Paket selbst fehlerhaft, sondern sein Inhalt, da Port 53 für DNS verwendet wird und Ihr Paket keine gültige DNS-Anfrage enthält.
Tkausl

@tkausl du hast absolut recht. Wenn Sie andere Ports als 53 verwenden, treten keine "fehlerhaften" Fehler auf. Vielen Dank, dass Sie darauf hingewiesen haben.
User322500

1
Wenn Sie keine Standardprotokolle verwenden, sollten Sie Ports im Bereich 49152 bis 65535 verwenden. Da Linux standardmäßig den Bereich 32768 bis 60999 als kurzlebige Ports verwendet, empfehle ich, diese auch nicht für Nicht-Standardprotokolle zu wählen. 61000 bis 65535 sind jedoch Freiwild für nicht standardisierte Protokolle. Normalerweise echo $[61002+RANDOM%4532]wähle ich eine zufällige Portnummer in diesem Bereich aus.
Kasperd

1
Nicht als root angemeldet sein. Sie sollten den größten Teil Ihrer Aktivitäten als Nicht-Root-Benutzer ausführen. Wenn Sie als Root arbeiten, werden Sie erneut gefragt, wie der Computer repariert werden soll, und wir können Ihnen nicht weiterhelfen (es sei denn, Sie empfehlen eine Neuinstallation).
Strg-Alt-Delor

1
@ tkausl Schau, was du verloren hast, weil du deinen Kommentar nicht als Antwort gepostet hast ...
George Vasiliou

Antworten:


41

Ihr Paket ist aus IP- und UDP-Sicht vollständig gültig. Wenn Sie die Protokolldetails für Ethernet / IP / UDP im unteren Bereich von Wireshark erweitern, sehen Sie, dass das Paket erfolgreich analysiert wurde.

Da es jedoch für Port 53 bestimmt ist, versucht Wireshark, es als DNS-Paket zu analysieren, was nicht möglich ist (da die Zeichenfolge "Dies ist ein Test" keine gültige DNS-Anforderung gemäß RFC 1035- Spezifikation ist).

Wenn Sie der Spezifikation unter diesem Link folgen, können Sie ein Paket erstellen, das gültig ist, wenn es als DNS-Anforderung analysiert wird. Wenn Sie das Paket an einen anderen Port senden, werden Sie feststellen, dass Wireshark es nicht mehr als DNS-Anforderung analysiert und diese Warnung daher nicht anzeigt.


15

Sie können sie mit Weiterleitung an Bash-Spezialaliase senden.

Aus Bash-Hilfeseiten:

/ dev / tcp / host / port Wenn host ein gültiger Hostname oder eine gültige Internetadresse ist und port eine ganzzahlige Portnummer oder ein Dienstname, versucht bash, den entsprechenden TCP-Socket zu öffnen.

/ dev / udp / host / port Wenn host ein gültiger Hostname oder eine gültige Internetadresse ist und port eine ganzzahlige Portnummer oder ein Dienstname, versucht bash, den entsprechenden UDP-Socket zu öffnen.

Dies sendet ein UDP-Paket an 192.168.2.11 an Port 8080:

echo "This is a test" > /dev/udp/192.168.2.11/8080

Danke für diese Antwort. Ich habe meine Frage aktualisiert. Das Verwenden Ihrer Methode erzeugt leider auch eine Fehlermeldung "fehlerhaftes Paket".
User322500

-1

Hier gibt es mehrere Fragen; Die Behauptung eines "fehlerhaften Pakets" kann auf das Auslagern von Prüfsummen zurückzuführen sein. Wenn dies der Fall ist, handelt es sich um einen falschen Fehler, da die Paketerfassung keine vollständige Ansicht aufweist. Ein Teil der Arbeit wurde stattdessen auf der Netzwerkhardware ausgeführt. WireShark sollte eine Dokumentation dazu haben.

Andernfalls verschiedene Werkzeuge (wie socat, ncoder netcat, oder über extrem ähnliche Merkmale in Shells wie ksh93oder bash) können von der Standardeingabe nehmen Bytes und stecken sie in dem, was Paket ein UDP wird. Ob dies "richtig" ist, hängt vom Protokoll ab. Theoretisch könnte man auf diese Weise ein DNS- oder DHCP-Paket erstellen und senden, obwohl die meisten Leute eine Bibliothek oder dedizierte Software verwenden, die das betreffende Protokoll (hoffentlich) korrekt implementiert, da in der Regel viel mehr erforderlich ist, als nur ein paar Bits einzugeben den Hauptteil eines Pakets und das Senden über die Leitung, insbesondere das Behandeln von Antworten, das Wiederholen nach Zeitüberschreitung oder nach Fehlern, Paket-Header-Felder usw. Die Protokolle sind normalerweise in RFC sehr gut dokumentiert, oder siehe die Buchreihe "TCP / IP Illustrated" von Stevens für noch mehr Dokumentation.

Spezielle Tools, wie zum Beispiel nmapdie Erstellung von Paketen, erledigen sehr individuelle Aufgaben. Andernfalls wird für die manuelle Paketkonstruktion normalerweise eine Programmiersprache verwendet, obwohl die meisten Programme vorhandene Bibliotheken oder Systemdienste zum Senden von DNS- oder DHCP- oder anderen UDP-Paketen verwenden, da diese viel weniger Arbeit und weniger fehleranfällig sind als das manuelle Erstellen eines Raw-Pakets Paket von Grund auf neu.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.