【发布时间】:2013-11-26 12:53:36
【问题描述】:
当系统上只有 IPv6 地址可用时,你能打开AF_INET 套接字吗?
我正在尝试为一个可能只有 IPv6 地址处于活动状态(不是双栈)的系统获取 HWADDR。
我可以使用AF_INET 打开一个套接字吗?我只对查找 MAC 地址感兴趣
【问题讨论】:
-
你不能在
AF_INET6套接字上使用SIOCGIFHWADDR吗?
当系统上只有 IPv6 地址可用时,你能打开AF_INET 套接字吗?
我正在尝试为一个可能只有 IPv6 地址处于活动状态(不是双栈)的系统获取 HWADDR。
我可以使用AF_INET 打开一个套接字吗?我只对查找 MAC 地址感兴趣
【问题讨论】:
AF_INET6 套接字上使用SIOCGIFHWADDR 吗?
您当然可以使用系统调用socket() 创建一个 IPv4 套接字。但是,使用 bind() 将其绑定到 IPv6 接口会失败。
【讨论】:
我看不到问题所在。您可以在 IPv4 和 IPv6 套接字上调用 SIOCGIFHWADDR。
无论我使用AF_INET 还是AF_INET6 创建套接字,ioctl() 调用都会成功并给我我所请求的设备的硬件地址。
【讨论】:
您可以创建 IPv4 套接字。如果你不能,那么当你下个月连接到支持 v4 的网络时,系统也将无法接受 IPv4 地址,明白吗?
但我不确定 SIOCGIFHWADDR 是否可以在没有通过非环回接口的路由的情况下工作。您可以在目标系统上尝试 tat,或者同时尝试 AF_INET 和 AF_INET6,捕获错误并使用任何返回结果。
【讨论】: