使用和UDP套接字时如何设置源地址

时间:2011-04-22 12:11:50

标签: c++ linux sockets udp

我有两台使用VRRP进行冗余的电脑。因此,每台PC(Linux)都有一个物理和虚拟IP地址。

我有一个带有UDP协议的客户端/服务器架构的软件(C ++)。软件将侦听套接字绑定在“0.0.0.0”上,并在每次需要向另一方发送一些数据时使用新套接字。通过wireshark,我发现当它发送数据时,源IP就是phisycal ... 如何将发送套接字的源地址设置为虚拟套接字?

注意:Whit ifconfig我只看到带有物理地址的eth0 ......

2 个答案:

答案 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成员,您可以通过编程方式将其设置为源地址。