ioctl を使用して Linux で IPv6 アドレスを取得する
これはおそらくうまくいきません。
man 7 netdevice
から :
SIOCGIFCONF
インターフェイス (トランスポート層) アドレスのリストを返します。これは現在、AF_INET のアドレスのみを意味します (IPv4) ファミリとの互換性。
[...]
注意
[...]
ローカル IPv6 IP アドレスは、/proc/net または viartnetlink(7) で見つけることができます。
はい、その ioctl はレガシーであり、IPv6 を返しません。プラットフォームごとに、IPv6 を取得する方法が異なります:
- Linux、頭がおかしいなら NETLINK を使って、
getifaddrs
を使って 漠然と最近の glibc をお持ちの場合、それ以外の場合は/proc/net/if_inet6
をお読みください (例:Android) - Darwin または FreeBSD:
getifaddrs
を使用 . - Solaris、
SIOCGLIFCONF
を使用 . - AIX、
SIOCGIFCONF
を使用 実際にIPv4およびIPv6アドレスを返します(sa_len
があるため)struct sockaddr
のフィールド 彼らは実際にそれをサポートできます)。