Networking
如何在 BSD/OS X 上將所有 UDP 流量從一個埠重定向到另一個埠?
在
Mac OS X 10.9.5
我正在執行boot2docker
並想暫時將非特權 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
就 UDP 而言,檢查
netstat -an
並沒有顯示多少開放:udp6 0 0 *.58669 *.* udp4 0 0 *.58669 *.*
我在網上能找到的**唯一相關的東西**沒有多大幫助。
如何在 Mac OS X 上將 UDP 流量從一個埠“鏡像”到另一個埠的好方法是什麼?
我嘗試了以下步驟,這應該可以工作,但在 Mac 上不起作用(將埠 20 UDP 文本消息轉發到埠 29),但您可能還是想嘗試一下:
cd /tmp
mkfifo backpipe
sudo nc -ulk 20 0<backpipe |sudo nc -ulk 29 | tee backpipe
- 在另一個終端上 - 用
echo -n “this is a test” | sudo nc -4u -w1 localhost 20
可能是使用被破壞或fifo 特殊文件無法正常工作。
但是,我找到了一種“更簡單”的方法。
- 下載一個很小的c程序源文件,名為:udp_redirect(點擊這裡下載)
- 編譯它
gcc -w udp_redirect.c -o udp_redirect
- 在後台執行它
sudo ./udp_redirect 127.0.0.1 20 127.0.0.1 29 &
- 在 29 埠設置監聽器進行測試
sudo nc -ul 29
- 在第二個終端上,使用
echo “this is a test” | sudo nc -4u -w1 localhost 20
此測試將 UDP 文本消息發送到埠 20,並觀察第一個終端中埠 29 上的偵聽器列印消息。您還可以在埠 20 上設置偵聽器並查看沒有可用的消息,它們都被轉發(不重複)到埠 29。
我說它“更容易”,因為
udp_redirect
二進製文件更容易使用,不需要特殊的 fifo 文件,不需要管道,不需要nc
實用程序,最重要的是,它可以工作!