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, l'utilisation de commandes telles que $ echo "this is a test" > /dev/udp/127.0.0.1/53
produire des erreurs de «paquet mal formé» dans Wireshark.
La commande echo est envoyée / remise au serveur Netcat sans erreur. Mais cela m'a fait me demander: est-il possible de construire manuellement un paquet UDP approprié avec écho ou un ou plusieurs autres outils Unix natifs?
J'utilise Debian et macOS.
echo $[61002+RANDOM%4532]
pour choisir un numéro de port aléatoire dans cette plage.Réponses:
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 la spécification RFC 1035 ).
Si vous suivez les spécifications de ce lien, vous serez en mesure de 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 demande DNS et n'affichera donc pas cet avertissement.
la source
Vous pouvez les envoyer à des alias spéciaux Bash avec redirection.
Depuis les pages de manuel de Bash:
Cela enverra un paquet UDP au 192.168.2.11 vers le port 8080:
la source
Il y a plusieurs questions ici; la réclamation d'un "paquet mal formé" peut être due au déchargement de la somme de contrôle et si c'est le cas, c'est une fausse erreur car elle reflète la capture de paquet n'ayant pas une vue complète - une partie du travail a plutôt été effectuée sur le matériel réseau. WireShark devrait avoir une documentation à ce sujet.
Sinon, divers outils (tels que
socat
,nc
ounetcat
, ou via des fonctionnalités extrêmement similaires dans des shells tels queksh93
oubash
) peuvent prendre des octets à partir de l'entrée standard et les vider dans ce qui devient un paquet UDP. Que ce soit "correct" dépend du protocole; on pourrait en théorie construire et envoyer un paquet DNS ou DHCP de cette façon, bien que le plus souvent, les gens utilisent une bibliothèque ou un logiciel dédié qui (espérons-le) implémente correctement le protocole en question, car il est généralement beaucoup plus complexe que de définir quelques bits dans le corps d'un paquet et l'envoi de celui-ci sur le fil, notamment la gestion des réponses, une nouvelle tentative après une temporisation ou une erreur, des champs d'en-tête de paquet, etc. Les protocoles sont généralement très bien documentés dans RFC, ou voir la série de livres "TCP / IP Illustrated" par Stevens pour encore plus de documentation.Des outils spécifiques tels que
nmap
faire des choses très personnalisées avec la construction de paquets. Sinon, pour la construction manuelle de paquets, un langage de programmation est généralement utilisé, bien que la plupart des logiciels utilisent des bibliothèques ou des services système existants pour envoyer des paquets DNS ou DHCP ou d'autres paquets UDP, car ceux-ci sont beaucoup moins de travail et beaucoup moins sujets aux erreurs que la création manuelle d'un brut paquet à partir de zéro.la source