【发布时间】:2013-06-12 11:48:48
【问题描述】:
我正在尝试找到一种方法来有效地更改运行我的程序的计算机的 IP 和网络掩码。我必须能够与用户可以访问的“盒子”保持通信,并且可以更改该盒子的 IP(但不能更改 Linux 主机的 IP)。幸运的是,盒子通过多播地址广播其 IP。我能够读取该地址并与盒子正在广播的任何 IP 通信。但是,我的问题是,当机器更改 Linux 主机子网之外的 IP 时,我会失去连接(正如我所期望的那样)。
因此,当 Linux 主机检测到正在广播的 IP 在其子网之外时,我需要一种快速而肮脏的方法来更改它的 IP 和网络掩码。我知道我可以修改/编辑 /etc/networking/interfaces 文件,但我希望有一些“实时”的东西,我不需要重新启动网络接口或 Linux 主机。此外,我想在更改期间维护我当前打开的所有套接字。我的主要问题是我有大量由其他应用程序运行的连接,这些连接不会因 IP 转换而损坏。此外,如果可能的话,我想避免在主机 IP 切换后重做必须为 Linux 运行多播路由添加命令。
我可以做些什么来满足这些要求吗?谢谢。
【问题讨论】:
-
如果你想保持当前的连接,最好确保在 Linux 机器中有两个 NIC,一个不变的用于常规流量,一个可以持续变形以与难以捉摸的机器通信。
-
不幸的是,所讨论的 Linux 主机系统是一个嵌入式系统,只能容纳一个 NIC。我不一定想在转换期间保持连接,但之后我需要所有套接字来保持连接。我想避免必须找到一种方法将 falg 发送到他们需要重新初始化的所有打开的套接字。
-
不确定你会有多少运气。如果您的 IP 地址发生变化,发往您原始 IP 的数据包可能最终会出现在 bitbucket 中。您可能需要考虑告诉客户您不支持更改难以捉摸的设备 IP 地址 - 有时,非技术解决方案是最好的,它们当然很容易实施 :-)
-
我试图对我的项目进行推理,但无济于事。盒子的 SOP 是始终更改 IP,即使我想不出这会带来任何好处的单个用例。我忘了说明我的每个套接字都在传输 UDP。唯一完成的接收是通过多播,或者发生额外的握手例程。
-
好吧,来个带两个网卡的代理盒怎么样。一个使用不变的 NIC 与您的嵌入式盒子通话,另一个适应难以捉摸的盒子。它只是为链接运行转发软件。我知道这变得越来越复杂,但是,如果他们要强加这些限制,您可能不得不“跳出框框”思考。这里的底线是,如果没有两个 NIC,我认为您不能同时适应 和 维护当前连接。
标签: c++ c linux networking ipv4