gpt4 book ai didi

选择套接字输出接口(interface) : SO_BINDTODEVICE vs bind before connect

转载 作者:太空狗 更新时间:2023-10-29 11:12:58 30 4
gpt4 key购买 nike

我正在尝试在具有两个接口(interface)的系统上设置套接字的输出接口(interface)。我在谷歌上搜索了很多,但发现了不同的答案。有人说我可以在调用 connect 以选择特定接口(interface)(如 How does a socket know which network interface controller to use? )之前 bind 套接字。但其他人说这还不够(如 http://codingrelic.geekhold.com/2009/10/code-snippet-sobindtodevice.htmlHow to open a socket on a specific interface and receive both IPv4 and IPv6 traffic )。

我有一个使用 SO_BINDTODEVICE 的工作实现。但是 bind before connect 解决方案不起作用。源地址似乎不影响路由,在这种情况下只考虑路由表。有人说这是Linux的Weak end system模型造成的。根据http://wiki.treck.com/Appendix_C:_Strong_End_System_Model_/_Weak_End_System_Model源地址不指定输出接口(interface)。

如果可能的话,我想要一个便携的解决方案。我知道 SO_BINDTODEVICE 仅在 Linux 中可用。

最佳答案

源地址不影响数据包的路由。接口(interface)将根据目标地址和主机的路由器表来选择。可以用route命令修改。

route default gw [gateway IP]

无论套接字绑定(bind)在哪个接口(interface)上,数据包都会根据路由表进行路由。 socket绑定(bind)的接口(interface)将决定源ip地址。

现在,我运行了一些绑定(bind)到环回接口(interface)并将套接字连接到 Internet 中的其他地址的测试,在这种情况下,连接失败并显示错误号 22 (EINVAL)。但是,在其他两个接口(interface)(没有环回)的测试中,连接到互联网中的服务器,无论我将套接字绑定(bind)到哪个接口(interface),数据包都是根据路由表发送出去的,在我的情况下是默认的规则。源地址取决于绑定(bind)。

关于选择套接字输出接口(interface) : SO_BINDTODEVICE vs bind before connect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33917575/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com