Ich versuche, IPv6-Adressen in meinem Linux-Betriebssystem wie folgt zu erhalten:
%Vor%Es funktioniert erfolgreich, wenn eine IPv4-Adresse für die Schnittstelle konfiguriert ist, aber wenn die Schnittstelle nur eine IPv6-Adresse hat, wird sie von ioctl nicht zurückgegeben.
Zum Beispiel konnte ich die IPv6-Adresse der folgenden Schnittstelle nicht abrufen, da nur die IPv6-Adresse konfiguriert ist:
%Vor%Ja, das ioctl ist veraltet und wird IPv6 nicht zurückgeben. Jede Plattform hat eine andere Möglichkeit, die IPv6 zu erhalten:
getifaddrs
, wenn du eine vage aktuelle glibc hast, ansonsten lies /proc/net/if_inet6
(zB auf Android). getifaddrs
. SIOCGLIFCONF
. SIOCGIFCONF
, das tatsächlich IPv4- und IPv6-Adressen zurückgibt (weil sie ein sa_len
-Feld in struct sockaddr
haben, das sie tatsächlich unterstützen können). Das wird wahrscheinlich nicht funktionieren.
Von man 7 netdevice
:
SIOCGIFCONF
Gibt eine Liste der Schnittstellenadressen (Transportschicht) zurück. Dies bedeutet derzeit nur Adressen der AF_INET (IPv4) -Familie für die Kompatibilität.
[...]
HINWEISE
[...]
Lokale IPv6 IP-Adressen können über / proc / net oder via gefunden werden rtnetlink (7).