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.
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.
echo $[61002+RANDOM%4532]
wähle ich eine zufällige Portnummer in diesem Bereich aus.Antworten:
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.
quelle
Sie können sie mit Weiterleitung an Bash-Spezialaliase senden.
Aus Bash-Hilfeseiten:
Dies sendet ein UDP-Paket an 192.168.2.11 an Port 8080:
quelle
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
,nc
odernetcat
, oder über extrem ähnliche Merkmale in Shells wieksh93
oderbash
) 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
nmap
die 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.quelle