web-dev-qa-db-ja.com

BSD / OS Xで1つのポートから別のポートにすべてのUDPトラフィックをリダイレクトするにはどうすればよいですか?

Mac OS X 10.9.5boot2dockerを実行していますが、一時的に非特権UDPポート69をboot2docker仮想マシンのポート69に転送したいと考えています。 Virtualboxは、特権ポートの転送のみをサポートします。

私はsocatを次のように実行してみました:

socat UDP-LISTEN:69,fork,reuseaddr UDP:192.168.59.101:69

tftp接続を作成しようとするまで問題なく動作し、次のようにクラッシュします。

socat[32232] E bind(5, {LEN=16 AF=2 0.0.0.0:69}, 16): Address already in use

netstat -anを確認しても、UDPまでは開いていません。

udp6       0      0  *.58669                *.*
udp4       0      0  *.58669                *.*

関連するもののみ私がWebで見つけたものはあまり役に立ちませんでした。

Mac OS Xで、あるポートから別のポートにUDPトラフィックを「ミラーリング」する良い方法は何ですか?

6
cwd

以下の手順を試しましたが、は機能しますが機能しますが、Macでは機能しません機能します(ポート20を転送します)ポート29へのUDPテキストメッセージ)、しかしとにかくそれを試してみたいかもしれません:

  1. cd /tmp
  2. mkfifo backpipe
  3. Sudo nc -ulk 20 0<backpipe |Sudo nc -ulk 29 | tee backpipe
  4. 別の端末で-echo -n “this is a test” | Sudo nc -4u -w1 localhost 20でテストします

使用法が壊れているか、fifo特殊ファイルが機能していない可能性があります。

しかし、私は「より簡単な」方法を見つけました。

  1. dp_redirect(ダウンロードするにはここをクリック) と呼ばれる非常に小さなcプログラムソースファイルをダウンロードします。
  2. gcc -w udp_redirect.c -o udp_redirectでコンパイルします
  3. バックグラウンドで実行するSudo ./udp_redirect 127.0.0.1 20 127.0.0.1 29 &
  4. ポート29にリスナーを設定してテストしますSudo nc -ul 29
  5. 2番目の端末で、echo “this is a test” | Sudo nc -4u -w1 localhost 20を使用してテストします

このテストでは、UDPテキストメッセージをポート20に送信し、最初の端末のポート29でリスナーがメッセージを出力するのを監視します。ポート20にリスナーを設定して、使用可能なメッセージがないことを確認することもできます。メッセージはすべてポート29に転送されます(複製されません)。

udp_redirectバイナリの方がはるかに使いやすく、特別なfifoファイルを必要とせず、パイプを必要とせず、ncユーティリティを必要とせず、最も重要なのは、それが「簡単」だと私は言います、 できます!

0
Andrew