Entonces, hay varias cosas llamadas netcat; ubuntu incluso tiene /etc/alternatives simbólico-link-hackery para ello.
Creo que parte de su problema es que UDP no realiza sesiones; He copiado parte del archivo /usr/share/doc/netcat-traditional/README.gz a continuación, que explica bastante bien.
Las conexiones UDP se abren en lugar de TCP cuando se especifica -u. Estas no son realmente "conexiones" per se, ya que UDP es un protocolo sin conexión, aunque netcat utiliza internamente el mecanismo de "socket UDP conectado" que admite la mayoría de los núcleos. Aunque netcat afirma que una conexión UDP saliente está "abierta" inmediatamente, no se envían datos hasta que se lee algo de la entrada estándar. Solo después es posible determinar si realmente hay un servidor UDP en el otro extremo y, a menudo, simplemente no se puede saber. La mayoría de los protocolos UDP usan tiempos de espera y reintentos para hacer lo suyo y, en muchos casos, no se molestarán en responder en absoluto, por lo que debe especificar un tiempo de espera y esperar lo mejor. Obtendrá más de las conexiones UDP si la entrada estándar se alimenta de una fuente de datos que se parece a varios tipos de solicitudes del servidor.
Bien, tal vez esa no sea una explicación tan buena, pero es lo que pude encontrar.
Si aún no lo ha hecho, es posible que desee experimentar con cualquier opción de netcat que pueda encontrar que tenga que ver con la espera... ¿ha experimentado con:
-
usando -l así como -u para asegurarse de que está en modo de "escucha"
-
-vv para ver exactamente lo que está pasando
-
-q -1 ...que debería "esperar por siempre" incluso después de recibir EOF (con suerte, ¿escuchar de nuevo?)
Puedes usar socat
para eso. Tiene una muy buena opción fork
:
fork
Después de establecer una conexión, maneja su canal en un proceso secundario y mantiene el proceso principal intentando producir más conexiones, ya sea escuchando o conectándose en un bucle (ejemplo).
Cliente (sí, esto se ejecuta desde el cliente):
$ ssh -L 7753:localhost:7753 YourServer.com "/usr/bin/socat tcp4-listen:7753,reuseaddr,fork UDP:8.8.8.8:53"
Cliente:
$ sudo socat udp4-listen:53,reuseaddr,fork tcp:localhost:7753
$ dig @127.0.0.1 google.com