【问题标题】:socat listen to all IPs assigned to a particular network interfacesocat 监听分配给特定网络接口的所有 IP
【发布时间】:2015-01-14 12:13:45
【问题描述】:

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

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

【问题讨论】:

  • 物理接口(eth0)是​​否有多​​个IP地址或虚拟接口(vlan等)?您希望收听的流量的目标 IP 和端口是什么?

标签: linux sockets network-programming socat


【解决方案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 的情况下,最好使用两个转发器。对于我目前的目的,上面的代码就足够了。

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2011-11-06
    • 2017-02-09
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多