socat侦听分配给特定网络接口的所有IP

时间:2015-01-14 12:13:46

标签: linux sockets network-programming socat

有谁知道如何让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

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

1 个答案:

答案 0 :(得分:1)

以下端口转发器侦听IP:x.y.z.t:80,但未绑定任何其他公开IP上的80(不同于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情况下,最好使用两个转发器。就我当前的目的而言,上面的代码就足够了。