web-dev-qa-db-fra.com

Comment créer un paquet UDP?

Lorsque j'exécute la commande Netcat suivante et que j'affiche les paquets avec Wireshark , cela indique que le paquet UDP est mal formé.

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

De même, en utilisant des commandes comme $ echo "this is a test" > /dev/udp/127.0.0.1/53 produire des erreurs de "paquet malformé" dans Wireshark.

Enter image description here

La commande echo est envoyée/remise au serveur Netcat sans erreur. Mais cela m'a amené à me demander: est-il possible de construire manuellement un paquet UDP approprié avec écho ou d'autres outils Unix natifs?

J'utilise Debian et macOS.

15
user322500

Votre paquet est complètement valide, du point de vue IP et UDP. Si vous développez les détails du protocole pour Ethernet/IP/UDP dans le volet inférieur de Wireshark, vous verrez que le paquet est correctement analysé.

Cependant, comme il est destiné au port 53, Wireshark tente de l'analyser en tant que paquet DNS, ce qu'il ne peut pas faire (puisque la chaîne "ceci est un test" n'est pas une demande DNS valide selon le RFC 1035 = spec).

Si vous suivez la spécification sur ce lien, vous pourrez construire un paquet qui est valide lorsqu'il est analysé en tant que demande DNS. Si vous envoyez le paquet à un autre port, vous remarquerez que Wireshark ne l'analysera plus comme une requête DNS et n'affichera donc pas cet avertissement.

41
nanofarad

Vous pouvez les envoyer à des alias spéciaux Bash avec redirection.

Depuis les pages de manuel de Bash:

/ dev/tcp/Host/port Si Host est un nom d'hôte ou une adresse Internet valide et que port est un numéro de port ou un nom de service entier, bash essaie d'ouvrir le socket TCP TCP correspondant).

/ dev/udp/Host/port Si Host est un nom d'hôte ou une adresse Internet valide et que port est un numéro de port entier ou un nom de service, bash tente d'ouvrir le socket UDP correspondant.

Cela enverra un paquet UDP au 192.168.2.11 vers le port 8080:

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