【问题标题】:Selecting IP source address from another interface other than the output one从输出接口以外的另一个接口选择 IP 源地址
【发布时间】:2011-04-25 13:41:06
【问题描述】:

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

例如,假设有 2 台机器通过 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。

提前致谢。

【问题讨论】:

  • 我很好奇你为什么“需要”这样做?
  • 机器是直接连接的还是它们之间有交换机/路由器?如果有设备,它在哪一层运行?

标签: c linux networking


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果一切都失败了,您始终可以在原始模式下打开套接字,然后您可以在 IP 和 UDP 标头中准确指定您想要的内容,包括源地址。

    Raw Sockets Tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-22
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 2012-04-28
      相关资源
      最近更新 更多