Quindi ci sono più cose chiamate netcat; ubuntu ha persino /etc/alternatives link-hackery simbolico.
Penso che parte del tuo problema sia che UDP non fa sessioni; Ho copiato parte del file /usr/share/doc/netcat-traditional/README.gz qui sotto che fa un ottimo lavoro di spiegazione.
Le connessioni UDP vengono aperte invece di TCP quando viene specificato -u. Queste non sono realmente "connessioni" in quanto UDP è un protocollo senza connessione, sebbene netcat utilizzi internamente il meccanismo di "socket UDP connesso" supportato dalla maggior parte dei kernel. Sebbene netcat affermi che una connessione UDP in uscita è "aperta" immediatamente, nessun dato viene inviato fino a quando non viene letto qualcosa dallo standard input. La maggior parte dei protocolli UDP utilizza timeout e tentativi per eseguire le proprie operazioni e in molti casi non si preoccupa affatto di rispondere, quindi è necessario specificare un timeout e sperare per il meglio. Otterrai di più dalle connessioni UDP se l'input standard viene alimentato da una fonte di dati che assomiglia a vari tipi di richieste del server.
OK, forse non è una gran bella spiegazione, ma è quello che sono riuscito a trovare.
Se non l'hai ancora fatto, potresti voler sperimentare qualsiasi opzione netcat che puoi trovare che avrebbe a che fare con l'attesa... hai sperimentato con:
-
usando -l così come -u per assicurarti di essere in modalità "ascolto"
-
-vv per vedere esattamente cosa sta succedendo
-
-q -1 ...che dovrebbe "aspettare per sempre" anche dopo aver ricevuto EOF (si spera, ascolto di nuovo?)
Puoi usare socat
per quello. Ha un'opzione molto interessante fork
:
fork
Dopo aver stabilito una connessione, gestisce il suo canale in un processo figlio e fa in modo che il processo padre tenti di produrre più connessioni, ascoltando o connettendosi in un ciclo (esempio).
Client (sì, questo lo esegui dal client):
$ 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