【问题标题】:How to open a socket on a specific interface and receive both IPv4 and IPv6 traffic如何在特定接口上打开套接字并接收 IPv4 和 IPv6 流量
【发布时间】:2011-07-03 12:05:57
【问题描述】:

使用 IPv4,我可以 bind() 到特定地址以选择将用于接收数据包的接口(在某些情况下,也可以用于发送,但这不是重点)。

在双栈 IPv6/IPV4 机器上我有这个问题:我可以创建一个 6 个套接字并使用它来接收 4 个流量,但是如果我想绑定到特定的接口,我必须选择一个 IP 地址来绑定到。

如果我绑定到 IPv6 地址,我将过滤掉所有 IPv4 流量,反之亦然。

如何从特定接口接收 IPv4 和 IPv6 流量?

【问题讨论】:

    标签: bind ipv6 ipv4


    【解决方案1】:

    如果您使用的是 Linux,您应该能够使用SO_BINDTODEVICE 套接字选项来绑定到接口而不是特定的 IP 地址。 socket 手册页中对此进行了描述。

    【讨论】:

    • 谢谢。不幸的是,此解决方案不适用于 Winsock 2。我想如果堆栈不支持 SO_BINDTODEVICE,则没有解决方案。
    【解决方案2】:

    没有标准的可移植接口用于将单个套接字绑定到未指定的地址并将范围限制为特定接口上的地址,更不用说同时选择性地要求强主机模型与该套接字进行通信。每个支持此功能的操作系统都有不同的做法。

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 2012-07-27
      • 2014-01-06
      • 1970-01-01
      • 2019-09-01
      • 2021-04-28
      相关资源
      最近更新 更多