这可以被认为是此早期SO问题的延续.
理想情况下,无论如何,我都希望将进程监禁到仅使用某个界面.它将进行TCP连接,发送UDP数据报和监听UDP广播.目前,我在做的是:
确定要使用的接口的IP.
创建IP策略规则,将来自接口的所有数据包路由到该IP
创建另一个IP策略规则,将来自该IP的所有数据包路由到该接口
为每个规则设置默认路由表
现在,这主要是有效的,但客户流程也必须愿意发挥作用.也就是说,它需要绑定到它想要使用的接口的特定IP,我想我也需要设置SO_BINDTODEVICE
.(但是,我一直在阅读有关SO_BINDTODEVICE
在使用TCP或UDP时是否实际工作的冲突信息.)幸运的是,客户端应用程序是Python,我可以扩展套接字类以透明地完成所有这些操作.但我不确定这是一个完整的解决方案,特别是在接收广播方面.
我的问题是:
请问SO_BINDTODEVICE
做什么,我想在这里?或者它只对原始套接字有效吗?有人评论说," SO_BINDTODEVICE
在套接字上不能保证套接字只接收到达该物理接口的线/天线的数据包." 如果确实如此,那又做 SO_BINDTODEVICE
什么呢?
有没有办法做到这一点,本地IP不必是唯一的?除了一个接口上的DHCP服务器可能将其分配给另一个接口正在使用的IP这一事实之外,这不会是一个问题,从而使路由表混乱.
如何仅从特定界面接收广播?绑定到特定IP似乎使它忽略广播,这是有道理的,但不是我正在寻找的.
我正在运行Ubuntu 8.04 w/Linux内核2.6.26.能够通过两个不同的接口同时访问两个不同网络上的同一子网是一个不可协商的要求,因此(大部分)免于"不要那样做".:)