socat 转发到多个地址

socat 转发到多个地址

我有一个传入的视频流,我想设置多个进程来处理它,每个进程都在自己的地址上运行。读了一些资料后,似乎索卡特是实现此目的的一种方式

socat TCP4-LISTEN:1934,fork,reuseaddr TCP4:someaddress:1935 

这会将所有内容转发到目标地址,但只允许我绑定一个目标。有没有办法用 socat 绑定多个目标地址?如果我尝试多次单独绑定,后续绑定时会收到“地址已在使用中”错误。我不会被迫使用 socat,如果有人知道更好的方法,任何可以让我复制传入流的东西都是好的。谢谢。

答案1

根据我之前的评论,我刚刚测试了这个解决方案[1],如果我理解您的需求,它可以按预期工作:

socat -u tcp4-listen:1934 - | tee >(socat - tcp4:127.0.0.1:1935) >(socat - tcp4:127.0.0.1:1936) > /dev/null

启动这个之前必须已经有进程在监听 1935 和 1936 否则右边socat会抱怨。

这仍然是一个非常脆弱的解决方案。我建议尝试其他方法,例如临时缓存文件或管道。

[1] 像这样:

  • nc -l 127.0.0.1 1935在壳里
  • nc -l 127.0.0.1 1936在另一个 shell 中
  • 在第三个 shell 中执行上述命令
  • 第四个:echo "foobar" | nc 127.0.0.1 1934
  • 我确实在第一个和第二个 shell 的输出中看到了“foobar”。

答案2

您可以在您的目的地启动 socat 吗?

刚刚使用socat -d -d -b67108864 -U TCP4-LISTEN:65431,tcpwrap,tcpwrap-etc=.,reuseaddr,fork OPEN:filename

当前目录中的 hosts.allow 有一行: socat: address address address address

-U 反转方向以便服务器进行监听。

socat TCP:server:65431 - |.......... 到达目的地。

相关内容