我有一个具有两个不同网络接口的服务器,每个接口都有不同的IP地址.如何创建一个套接字以便它能够输出特定的IP地址?
我更喜欢python的例子,但问题是语言不可知,所以请开枪.
编辑:请不要给我"你不能"作为答案.我的意思是,它是一台电脑.我可以做任何我喜欢的事情,例如 - 我可以以编程方式禁用我不想要的一个界面.我正在寻找更漂亮的东西.
这可以被认为是此早期SO问题的延续.
理想情况下,无论如何,我都希望将进程监禁到仅使用某个界面.它将进行TCP连接,发送UDP数据报和监听UDP广播.目前,我在做的是:
现在,这主要是有效的,但客户流程也必须愿意发挥作用.也就是说,它需要绑定到它想要使用的接口的特定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.能够通过两个不同的接口同时访问两个不同网络上的同一子网是一个不可协商的要求,因此(大部分)免于"不要那样做".:)