it-swarm.com.de

Wie erstelle ich ein UDP-Paket?

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 mit Befehlen wie $ echo "this is a test" > /dev/udp/127.0.0.1/53 erzeugen fehlerhafte Paketfehler in Wireshark.

(Enter image description here

Der Echo-Befehl wird fehlerfrei an den Netcat-Server gesendet/übermittelt. 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.

15
user322500

Ihr Paket ist aus Sicht von IP und UDP vollständig gültig. Wenn Sie die Protokolldetails für Ethernet/IP/UDP im unteren Bereich von Wireshark erweitern, werden Sie feststellen, 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 ist = spec).

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.

41
nanofarad

Sie können sie mit Umleitung an spezielle Bash-Aliase senden.

Aus Bash-Manpages:

/ dev/tcp/Host/port Wenn Host ein gültiger Hostname oder eine gültige Internetadresse ist und Port eine ganzzahlige Portnummer oder ein Dienstname ist, versucht bash, den entsprechenden Socket TCP) 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 ist, versucht bash, den entsprechenden UDP-Socket zu öffnen.

Dadurch wird ein UDP-Paket an Port 8080 an 192.168.2.11 gesendet:

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