Je suppose que c'est proche de Linux - Netcat arrête d'écoute pour le trafic UDP - Super utilisateur , mais je pensais que je ferais mieux de demander quand même
Aussi loin que versions de NetCat J'utilise Ubuntu 11.04 et la valeur par défaut netcat
dessus, ce que je devine est le openbsd
one:
$ nc
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port[s]]
C'est ce que je trouve étrange: le premier cas fonctionne comme prévu - j'ouvre un serveur UDP dans un terminal:
$ Sudo nc -ul 5000
... et dans un autre terminal, j'en initie une nouvelle connexion client UDP - et je saisis trois fois hello
, appuyez sur Entrée après chaque:
$ nc -u 127.0.0.1 5000
hello
hello
hello
^C
... et revenez sur le terminal du serveur, il a imprimé trois fois hello
, comme prévu:
$ Sudo nc -ul 5000
hello
hello
hello
^C
Jusqu'ici tout va bien, tous fonctionne comme prévu. Cependant, disons que j'essaie maintenant de la même chose en passant par la passe au client; Établissez donc d'abord un serveur UDP dans un terminal:
$ Sudo nc -ul 5000
... et dans une autre, pipe quelques données dans nc
comme client UDP:
$ echo hello | nc -u 127.0.0.1 5000
hello
hello
^C
... Après la commande client, la série de coquille se fige comme si vous attendez une entrée - donc là-bas, je tapez hello
et entrez deux fois de plus; Mais le serveur n'a enregistré que le premier hello
(qui a été canalisé via echo
). En outre, même si vous appuyez sur Ctrl-C et essayez de répéter le client echo hello | nc -u 127.0.0.1 5000
commande, le serveur reste reste indiqué juste au tout premier hello
:
$ Sudo nc -ul 57130
hello
^C
... et seulement après avoir arrêté le serveur avec Ctrl-C et le redémarrer à nouveau, peut-on répéter le client echo hello | nc -u 127.0.0.1 5000
commande et observer le fonctionnement.
Est-ce la façon dont nc
est censé se comporter? Je m'attendrais à ce que des appels au moins répétés à echo hello | nc -u 127.0.0.1 5000
serait enregistré - sans avoir à redémarrer le serveur? Ou peut-être qu'il y a un commutateur de ligne de commande spécial pour ce type de comportement?
EDIT: J'ai trouvé ce nice PDF Présentation: Traitement de la SOCAT - Manipulation de toutes sortes de sockets , qui contient le netcat
vs socat
Remarques:
nETCAT - Limitations
[.____] ● un coup d'œil uniquement (se termine la fermeture de la prise de courant)
...
Exemples 1: Remplacement NETCAT
...
[.____] ● Client UDP avec port source:
[.____] NC -U -P 500 1.2.3.4 500
Socat - UDP: 1.2.3.4: 500, SP = 500
● TCP serveur:
[.____] nc -l -p 8080
[.____] Socat - TCP-L: 8080, réutilisation
...
... Cependant, je reçois à peu près le même comportement que ci-dessus, si je remplace la commande serveur avec "socat - udp4-listen:5000,reuseaddr
"- et la ligne client avec" socat - udp:127.0.0.1:5000
"... avec l'entrée de la canalisation" echo hello | socat - udp:127.0.0.1:5000
", la seule différence est que la commande existe ici au moins une fois que le mot hello
avait été envoyé - cependant, encore une fois, les exécutions consécutives de cette commande ne causeront aucune réception sur le serveur, jusqu'à ce que le serveur soit redémarré.
Si vous faites une ronde de NC d'écoute, il montrera que NetCat attend la connexion et une fois qu'il l'obtient, se connectera à cet hôte et à cet orgueil, ignorant tous les autres. Vous devez ajouter '-K' pour continuer et "-W 0 '" pour effectuer chaque connexion après 0 secondes. Socat est un meilleur choix, je pense.