从输出端以外的其他接口中选择IP源地址

时间:2011-04-25 13:41:06

标签: c linux networking

我想知道一种方法,我可以选择使用UDP套接字发送的数据包的IP源地址。我需要使用环回接口lo:0的IP发送,但是套接字会自动使用输出接口的IP填充源IP。

例如,考虑两台通过vlan连接的机器,分别具有接口地址10.10.1.1和10.10.1.2。机器环回地址为100.100.100.1和100.100.100.2。

现在,会发生什么:

     Machine 1                                       Machine 2

           --->  src: 10.10.1.1/dst: 100.100.100.2

                 dst: 100.100.100.2/src: 10.10.10.2 <----

我需要以下内容:

     Machine 1                                       Machine 2

           --->  src: 100.100.100.1/dst: 100.100.100.2

                 dst: 100.100.100.1/src: 100.100.100.2 <----

在使用套接字时,是否有人知道设置传出源IP的任何解决方案?

我正在使用C编程,而我正在使用Linux。

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用bind()指定套接字的本地地址。

请注意,根据路由规则等操作系统配置,这可能会影响套接字所连接的接口。

答案 1 :(得分:0)

如果所有其他方法都失败了,您可以随时以原始模式打开套接字,然后您可以在IP和UDP标头中准确指定您想要的内容,包括源地址。

Raw Sockets Tutorial