Netcat arrête d'écouter le trafic UDP

8

J'utilise netcat sur certaines machines Linux (voir cette autre question ), mais je vois un comportement inattendu.

Contrairement au guide de la réponse acceptée, je n'utilise pas le tunneling UDP pour effectuer des requêtes DNS. J'ai un serveur distant sur lequel je peux me connecter, mais pas installer de logiciel, et j'essaie de tunneler le trafic UDP de mon ordinateur vers le serveur, puis de configurer un tunnel séparé pour renvoyer les réponses UDP du serveur vers ma machine .

Le tunnel allant de ma machine au serveur fonctionne parfaitement, mais côté serveur, l'instance de netcat qui écoute la réponse du serveur UDP fermera l'auditeur après avoir reçu la première réponse. Je peux donc envoyer une demande et obtenir 1 réponse, mais toutes les demandes suivantes parviennent au serveur, mais les réponses ne sont pas reçues. En utilisant netstat, je peux voir qu'avant la réception de la réponse, netcat écoute, mais le port est ensuite fermé après la réception de la réponse.

L'instance netcat sur ma machine semble tout gérer très bien. Les deux machines exécutent netcat v1.10-38. Une idée sur ce qu'il se passe?

lourd
la source

Réponses:

2

Il y a donc plusieurs choses appelées netcat; ubuntu a même pour lui / etc / alternatives le piratage de liens symboliques.

Je pense qu'une partie de votre problème est que UDP ne fait pas de sessions; J'ai copié une partie du fichier /usr/share/doc/netcat-traditional/README.gz ci-dessous qui fait un très bon travail d'explication.

Les connexions UDP sont ouvertes au lieu de TCP lorsque -u est spécifié. Ce ne sont pas vraiment des "connexions" en soi car UDP est un protocole sans connexion, bien que netcat utilise en interne le mécanisme de "socket UDP connecté" que la plupart des noyaux prennent en charge. Bien que netcat affirme qu'une connexion UDP sortante est "ouverte" immédiatement, aucune donnée n'est envoyée jusqu'à ce que quelque chose soit lu à partir de l'entrée standard. Ce n'est qu'ensuite qu'il est possible de déterminer s'il y a vraiment un serveur UDP à l'autre bout, et souvent vous ne pouvez tout simplement pas le dire. La plupart des protocoles UDP utilisent des délais d'attente et des tentatives pour faire leur travail et, dans de nombreux cas, ne prendront pas la peine de répondre, vous devez donc spécifier un délai d'attente et espérer le meilleur.

D'accord, ce n'est peut-être pas une si grande explication, mais c'est ce que j'ai pu trouver.

Si vous ne l'avez pas encore fait, vous voudrez peut-être expérimenter toutes les options de netcat que vous pouvez trouver qui auraient à voir avec l'attente ... avez-vous expérimenté avec:

  • en utilisant -l ainsi que -u pour vous assurer que vous êtes en mode "écoute"

  • -vv pour voir exactement ce qui se passe

  • -q -1 ... qui devrait "attendre indéfiniment" même après avoir reçu EOF (si tout va bien, réécouter?)

pbr
la source
5
c'est donc une réponse acceptée maintenant, mais nous ne savons pas lequel des conseils s'est avéré utile :(
törzsmókus
2

Vous pouvez l'utiliser socatpour cela. Il a une très belle option fork:

fork Après avoir établi une connexion, gère son canal dans un processus enfant et conserve le processus parent essayant de produire plus de connexions, soit en écoutant, soit en se connectant en boucle (exemple).

Client (oui, vous exécutez à partir du client):

$ ssh -L 7753:localhost:7753 YourServer.com "/usr/bin/socat tcp4-listen:7753,reuseaddr,fork UDP:8.8.8.8:53"

Client:

$ sudo socat udp4-listen:53,reuseaddr,fork tcp:localhost:7753
$ dig @127.0.0.1 google.com
Andrey Arapov
la source