したがって、netcat と呼ばれるものは複数あります。 ubuntu には /etc/alternatives symbolic-link-hackery もあります。
あなたの問題の一部は、UDP がセッションを行わないことだと思います。以下のファイル /usr/share/doc/netcat-traditional/README.gz の一部をコピーしましたが、これはかなりうまく説明しています。
<ブロック引用>-u を指定すると、TCP ではなく UDP 接続が開かれます。 netcat は、ほとんどのカーネルがサポートする「接続された UDPsocket」メカニズムを内部的に使用しますが、UDP はコネクションレス プロトコルであるため、これらは本質的に「接続」ではありません。 netcat は発信 UDP 接続がすぐに「開いている」と主張しますが、標準入力から何かが読み取られるまでデータは送信されません。ほとんどの UDP プロトコルは、タイムアウトと再試行を使用して処理を行いますが、多くの場合、まったく応答しません。そのため、タイムアウトを指定して、最善を尽くす必要があります。さまざまな種類のサーバー リクエストに似たデータ ソースから標準入力が供給されると、UDP 接続をさらに活用できます。
わかりましたので、それはそれほど素晴らしい説明ではないかもしれませんが、私が見つけたものです.
まだ試していない場合は、待機に関係する可能性のある netcat オプションを試してみることをお勧めします...試したことはありますか:
-
-l と -u を使用して、「リスニング」モードであることを確認します
-
-vv 何が起こっているかを正確に確認する
-
-q -1 ...EOF を受信した後でも「永遠に待機」する必要があります (うまくいけば、もう一度リッスンしますか?)
socat
を使用できます そのために。非常に優れたオプション fork
があります :
fork
接続を確立した後、子プロセスでそのチャネルを処理し、親プロセスがリッスンするか、ループで接続することにより、さらに接続を作成しようとします (例)。
クライアント (はい、クライアントから実行します):
$ ssh -L 7753:localhost:7753 YourServer.com "/usr/bin/socat tcp4-listen:7753,reuseaddr,fork UDP:8.8.8.8:53"
クライアント:
$ sudo socat udp4-listen:53,reuseaddr,fork tcp:localhost:7753
$ dig @127.0.0.1 google.com