我有两台使用VRRP进行冗余的电脑。因此,每台PC(Linux)都有一个物理和虚拟IP地址。
我有一个带有UDP协议的客户端/服务器架构的软件(C ++)。软件将侦听套接字绑定在“0.0.0.0”上,并在每次需要向另一方发送一些数据时使用新套接字。通过wireshark,我发现当它发送数据时,源IP就是phisycal ... 如何将发送套接字的源地址设置为虚拟套接字?
注意:Whit ifconfig我只看到带有物理地址的eth0 ......
答案 0 :(得分:7)
当内核需要通过套接字发送内容时,它会执行以下步骤
所以你需要 bind(2)
你的套接字到你想要的地址。有关详细信息,请执行以下操作: Source Address Selection 。
答案 1 :(得分:0)
我不确定我完全理解你的问题,但是在低级别的linux上编写C / C ++代码,你可以从linux内核头文件中导入ip.h头文件,这样你就可以访问低级别了IP包结构。 (UDP在IP之上工作)
#include <linux/ip.h>
然后查看struct iphdr
,它是发送的每个IP数据包的标头,其中包含saddr
成员,您可以通过编程方式将其设置为源地址。