我可以将客户端套接字绑定到不属于任何接口的IP吗?

时间:2017-01-11 03:14:39

标签: sockets routing ip iptables

对于客户端套接字,我可以使用bind()将其绑定到特定的源IP地址以选择特定的接口。或者我可以直接使用connect()然后它会根据路由表选择源ip。

我想知道我可以将客户端套接字绑定到不属于任何接口的ip吗?例如:我有两个接口: eth0:ip0 eth1:ip1

(1)如果我将客户端套接字绑定到ip2。这可行吗? (2)如果(1)可行,假设客户端套接字通过eth0发送数据包。然后我在这个客户端主机中配置iptables,将所有传入的数据包转发到ip0(eth0)。在这种情况下,如果有从服务器端发回的数据包,目标IP地址是ip2(假设此数据包将到达我的客户端主机)。我的客户端套接字会收到数据包吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我真的不明白你的问题,但这里有:

对于客户端套接字,您通常希望操作系统及其路由表使用任何可用端口为您选择最佳接口。在这种情况下,您绑定到INADDR_ANY(0)和端口0.或者根本不显式调用bind at。只需调用connect(),它就会做正确的事情。

如果需要通过特定接口进行客户端连接,请将套接字绑定到特定的IP地址。然后操作系统将尝试将该接口用于后续的连接呼叫以及之后的所有流量。

尝试将套接字绑定到不属于本地接口的IP肯定会导致错误。

不确定你对iptables的意思。听起来很冒险。