我想知道一种方法,我可以选择使用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。
提前致谢。
答案 0 :(得分:1)
使用bind()
指定套接字的本地地址。
请注意,根据路由规则等操作系统配置,这可能会影响套接字所连接的接口。
答案 1 :(得分:0)
如果所有其他方法都失败了,您可以随时以原始模式打开套接字,然后您可以在IP和UDP标头中准确指定您想要的内容,包括源地址。