4

有谁知道我如何socat监听分配给一个特定网络接口的所有接口?我不确定这是否可能。

如果我想绑定socat到特定的IP:PORT,我总是从命令的输出中解析 IP 信息ip,然后socat像这样绑定到它:

NETIFC=$(ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
socat -d -d TCP4-LISTEN:1234,fork,bind=$(NETIFC) UNIX-CLIENT:/tmp/foo.sock

我想我可以通过运行这样的方式来实现我所追求的socat

socat -d -d TCP4-LISTEN:1234,fork,so-bindtodevice=eth0 UNIX-CLIENT:/tmp/foo.sock

但我相信我缺少一些低级网络编程知识,因此不太了解这个选项应该做什么,我只是希望它应该做我想做的事情,但实际上它实际上绑定到所有网络接口。

4

1 回答 1

1

以下端口转发器侦听 IP: x.y.z.t:80,而不绑定到80任何其他公开的 IP(与 bind 参数不同)。

SOCAT_SOCKADDR=x.y.z.t socat TCP-LISTEN:80,reuseaddr,fork,su=nobody TCP:a.b.c.d:80

如果一个接口有多个 IP,则需要做一些实验!在这种ip v4, v6情况下,最好使用两个转发器。对于我目前的目的,上面的代码就足够了。

于 2019-11-10T14:56:14.910 回答