web-dev-qa-db-fra.com

Comment envoyer un seul paquet UDP avec netcat?

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.

104
Janne H

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 .

181
Peter Eisentraut

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
46
TraderJoeChicago

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.

8
Simon

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.

5
Evan

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
3
Sajjad Baeidi