【问题标题】:AF_INET socket when only IPv6 addresses are available on system?系统上只有 IPv6 地址可用时的 AF_INET 套接字?
【发布时间】:2013-11-26 12:53:36
【问题描述】:

当系统上只有 IPv6 地址可用时,你能打开AF_INET 套接字吗?

我正在尝试为一个可能只有 IPv6 地址处于活动状态(不是双栈)的系统获取 HWADDR。

我可以使用AF_INET 打开一个套接字吗?我只对查找 MAC 地址感兴趣

【问题讨论】:

  • 你不能在AF_INET6 套接字上使用SIOCGIFHWADDR 吗?

标签: c++ c ipv6


【解决方案1】:

您当然可以使用系统调用socket() 创建一个 IPv4 套接字。但是,使用 bind() 将其绑定到 IPv6 接口会失败。

【讨论】:

  • 我只需要它来使用ioctl(SIOCGIFHWADDR标志)获取HW地址
【解决方案2】:

我看不到问题所在。您可以在 IPv4 和 IPv6 套接字上调用 SIOCGIFHWADDR

无论我使用AF_INET 还是AF_INET6 创建套接字,ioctl() 调用都会成功并给我我所请求的设备的硬件地址。

【讨论】:

    【解决方案3】:

    您可以创建 IPv4 套接字。如果你不能,那么当你下个月连接到支持 v4 的网络时,系统也将无法接受 IPv4 地址,明白吗?

    但我不确定 SIOCGIFHWADDR 是否可以在没有通过非环回接口的路由的情况下工作。您可以在目标系统上尝试 tat,或者同时尝试 AF_INET 和 AF_INET6,捕获错误并使用任何返回结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2014-09-06
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      相关资源
      最近更新 更多