如何在 BSD/OS X 上将所有 UDP 流量从一个端口重定向到另一个端口?

cwd*_*cwd 6 osx networking port-forwarding udp socat

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
Run Code Online (Sandbox Code Playgroud)

它工作得很好,直到我尝试建立tftp连接然后它崩溃:

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

netstat -an就UDP而言,检查并没有显示多少开放:

udp6       0      0  *.58669                *.*
udp4       0      0  *.58669                *.*
Run Code Online (Sandbox Code Playgroud)

我在网上能找到的唯一相关的东西并没有多大帮助。

在 Mac OS X 上,将 UDP 流量从一个端口“镜像”到另一个端口的好方法是什么?

And*_*rew 2

我尝试了以下步骤,应该有效,但不起作用(将端口 20 UDP 文本消息转发到端口 29),但您可能想尝试一下:

\n
    \n
  1. cd /tmp
  2. \n
  3. mkfifo backpipe
  4. \n
  5. sudo nc -ulk 20 0<backpipe |sudo nc -ulk 29 | tee backpipe
  6. \n
  7. 在另一个终端上 - 测试它echo -n \xe2\x80\x9cthis is a test\xe2\x80\x9d | sudo nc -4u -w1 localhost 20
  8. \n
\n

可能是使用被破坏或者 fifo 特殊文件无法工作。

\n

然而,我找到了一种“更简单”的方法。

\n
    \n
  1. 下载一个非常小的c程序源文件,名为:udp_redirect(点击此处下载)
  2. \n
  3. 编译它gcc -w udp_redirect.c -o udp_redirect
  4. \n
  5. 在后台运行它sudo ./udp_redirect 127.0.0.1 20 127.0.0.1 29 &
  6. \n
  7. 在29端口设置监听来测试sudo nc -ul 29
  8. \n
  9. 在第二个终端上,使用以下命令进行测试echo \xe2\x80\x9cthis is a test\xe2\x80\x9d | sudo nc -4u -w1 localhost 20
  10. \n
\n

此测试将 UDP 文本消息发送到端口 20,并观察第一个终端中端口 29 上的侦听器打印消息。您还可以在端口 20 上设置侦听器,然后查看没有可用消息,它们全部转发(不重复)到端口 29。

\n

我说它“更容易”是因为udp_redirect二进制文件的使用更容易,不需要特殊的 fifo 文件,不需要管道,不需要nc,最重要的是,它可以工作!

\n