有谁知道如何让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
但是我相信我错过了一些低级别的网络编程知识,因此不能完全了解这个选项应该做什么,而且我只是希望它应该做我想做的事情,但事实上它实际上绑定到所有网络接口。
答案 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
情况下,最好使用两个转发器。就我当前的目的而言,上面的代码就足够了。