NetcatはUDPトラフィックのリッスンを停止します


8

一部のLinuxマシンでnetcatを使用していますが(この他の質問を参照)、予期しない動作が発生しています。

承認された回答のガイドとは異なり、DNSクエリを実行するためにUDPトンネリングを使用していません。ログインできるが、ソフトウェアをインストールできないリモートサーバーがあり、UDPトラフィックをコンピューターからサーバーにトンネリングし、UDP応答をサーバーからマシンに送信するために別のトンネルをセットアップしようとしています。

私のマシンからサーバーへのトンネルは完全に機能していますが、サーバー側では、UDPサーバーからの応答をリッスンしているnetcatのインスタンスは、最初の応答を受信した後にリスナーを閉じます。したがって、要求を送信して1つの応答を返すことができますが、後続の要求はサーバーにそれを許可しますが、応答は受信されません。netstatを使用すると、応答が受信される前にnetcatが待機していることがわかりますが、応答が受信された後はポートが閉じられます。

私のマシンのnetcatインスタンスはすべてをうまく処理しているようです。両方のマシンでnetcat v1.10-38が実行されています。何が起こっているのですか?

回答:


2

したがって、netcatと呼ばれるものが複数あります。ubuntuには/ etc / alternativesのシンボリックリンクハッカーさえあります。

あなたの問題の一部は、UDPがセッションを行わないことだと思います。以下の/usr/share/doc/netcat-traditional/README.gzファイルの一部をコピーしました。

-uを指定すると、TCPの代わりにUDP接続が開かれます。UDPはコネクションレス型プロトコルであるため、これらは実際には「接続」そのものではありませんが、netcatは内部でほとんどのカーネルがサポートする「接続されたUDPソケット」メカニズムを使用します。netcatは発信UDP接続がすぐに「オープン」であると主張していますが、標準入力から何かが読み取られるまでデータは送信されません。その後で初めて、実際に相手側にUDPサーバーがあるかどうかを判断することができます。ほとんどのUDPプロトコルはタイムアウトとリトライを使用して処理を行います。多くの場合、応答をまったく気にしません。そのため、タイムアウトを指定して、最善の結果を期待する必要があります。

わかりましたので、それはそれほど素晴らしい説明ではないかもしれませんが、私が見つけることができたものです。

まだ行っていない場合は、待機に関係していると思われるnetcatオプションを試してみることをお勧めします。

  • -uと同様に-lを使用して、「リスニング」モードであることを確認します。

  • -vv何が起こっているかを正確に確認する

  • -q -1 ... EOFを受信した後でも「永久に待機する」必要があります(うまくいけば、もう一度聞きますか?)


5
これが受け入れられた答えは、今あるが、我々は証明した便利な:(ヒントのどの知らない
törzsmókus

2

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.