Je veux envoyer une seule valeur courte dans un paquet UDP, mais en exécutant la commande
echo -n "hello" | nc -4u localhost 8000
Je peux voir que le serveur reçoit le bonjour mais je dois appuyer sur Ctrl+c quitter la commande netcat.
Comment puis-je le faire cesser après l'envoi bonjour?
Désolé, pour le bruit, j'ai relu la page de manuel et trouvé l'option -q
.
echo -n "hello" | nc -4u -q1 localhost 8000
fonctionne (il se ferme après 1 seconde).
Pour une raison quelconque, cela ne fonctionne pas avec -q0
.
Si vous utilisez bash, vous pouvez aussi bien écrire
echo -n "hello" >/dev/udp/localhost/8000
et évitez toutes les particularités et incompatibilités de netcat.
Cela fonctionne aussi en envoyant à d'autres hôtes, ex:
echo -n "hello" >/dev/udp/remotehost/8000
Ce ne sont pas de "vrais" périphériques sur le système de fichiers, mais bash "spécial" alias . Il y a des informations supplémentaires dans le manuel Bash .
Je n'ai pas trouvé l'option -q1
sur mon netcat. Au lieu de cela, j'ai utilisé l'option -w1
. Vous trouverez ci-dessous le script bash que j'ai créé pour envoyer un paquet udp à un hôte ou à un port:
#!/bin/bash
def_Host=localhost
def_port=43211
Host=${2:-$def_Host}
PORT=${3:-$def_port}
echo -n "$1" | nc -4u -w1 $Host $PORT
Sur un netcat actuel (v0.7.1), vous avez un commutateur -c:
-c, --close close connection on EOF from stdin
Par conséquent,
echo "hi" | nc -cu localhost 8000
devrait faire l'affaire.
Netcat envoie un paquet par nouvelle ligne. Donc ça va. Si vous faites quelque chose de plus complexe, vous pourriez avoir besoin de quelque chose d'autre.
Je m'amusais avec Wireshark quand j'ai compris cela. Je ne sais pas si ça aide.
J'ai eu le même problème mais j'utilise -w 0
pour n'envoyer qu'un seul paquet et le quitter. Vous devriez utiliser cette commande:
echo -n "hello" | nc -4u -w0 localhost 8000