Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C/C++;_C++_C_Linux_Networking_Ipv4 - Fatal编程技术网

C++ 使用C/C++;

C++ 使用C/C++;,c++,c,linux,networking,ipv4,C++,C,Linux,Networking,Ipv4,我正在试图找到一种方法,可以有效地更改运行我的程序的计算机的IP和网络掩码。我必须能够与用户有权访问的“盒子”保持通信,并可以更改该盒子的IP(但不能更改Linux主机的IP)。幸运的是,盒子通过多播地址广播其IP。我能够读取该地址,并与盒子正在广播的任何IP进行通信。但是,我的问题是,当这个盒子在Linux主机的子网之外更改IP时,我会失去连接(正如我预期的那样) 因此,当Linux主机检测到正在广播的IP位于其子网之外时,我需要一种快速而肮脏的方法来更改其IP和网络掩码。我知道我可以修改/编

我正在试图找到一种方法,可以有效地更改运行我的程序的计算机的IP和网络掩码。我必须能够与用户有权访问的“盒子”保持通信,并可以更改该盒子的IP(但不能更改Linux主机的IP)。幸运的是,盒子通过多播地址广播其IP。我能够读取该地址,并与盒子正在广播的任何IP进行通信。但是,我的问题是,当这个盒子在Linux主机的子网之外更改IP时,我会失去连接(正如我预期的那样)

因此,当Linux主机检测到正在广播的IP位于其子网之外时,我需要一种快速而肮脏的方法来更改其IP和网络掩码。我知道我可以修改/编辑/etc/networking/interfaces文件,但我希望有一些“实时”的东西,在那里我不需要重新启动网络接口或Linux主机。此外,我希望在更改期间维护当前打开的所有套接字。我的主要问题是,我有一系列由其他应用程序运行的连接,这些连接不能由于IP转换而损坏。另外,如果可能的话,我希望避免在主机IP切换后不得不重新运行Linux的multicast route add命令

我能做些什么来满足这些要求吗?谢谢。

如果不想更改接口的IP地址,则需要向接口添加额外的IP地址和子网。在Linux系统文档中搜索功能


.

如果您想保持当前连接,最好确保Linux机箱中有两个NIC,一个不变,一个用于常规通信,另一个可以不断变形以与难以捉摸的机箱通信。不幸的是,所讨论的Linux主机系统是一个嵌入式系统,只有一个NIC的容量。我不一定要在转换期间保持连接,但我需要所有套接字在转换后保持连接。我想避免必须找到一种方法将falg发送到所有需要重新初始化的打开的套接字。不知道你会有多幸运。如果您的IP地址发生更改,则发送到原始IP的数据包可能会最终出现在bitbucket中。您可能想考虑告诉客户,您不支持改变难以捉摸的设备IP地址-有时,非技术解决方案是最好的,它们当然容易实现:-我已经尝试用我的项目导致的原因无济于事。盒子的SOP是始终更改IP,即使我想不出一个单一的用例可以提供任何好处。我忘记声明我的每个套接字都在传输UDP。唯一要做的接收是通过多播,或者有额外的握手例程。好的,那么,一个带有两个NIC的代理盒怎么样。一个使用不变的NIC与嵌入式设备对话,另一个则适应难以捉摸的设备。它只是为链接运行转发软件。我知道这越来越复杂,但如果他们要施加这些限制,你可能不得不“跳出框框”。这里的底线是,没有两个NIC,我不认为您可以同时适应和维护当前的连接。感谢这一点,它看起来很有希望。在C/C++中,除了在命令行命令上调用system()之外,还有更干净的实现吗?您可以查看iproute2以了解它如何与内核接口,但我想从长远来看,
system(“ip addr add 192.168.1.2/24 brd+dev eth0”)
将更容易维护。