Erhalte IPv6-Adressen in Linux mit ioctl

8

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%     
Yury Bushev 23.12.2013, 12:34
quelle

2 Antworten

12

Ja, das ioctl ist veraltet und wird IPv6 nicht zurückgeben. Jede Plattform hat eine andere Möglichkeit, die IPv6 zu erhalten:

  • Linux, benutze NETLINK, wenn du verrückt bist, benutze getifaddrs , wenn du eine vage aktuelle glibc hast, ansonsten lies /proc/net/if_inet6 (zB auf Android).
  • Darwin oder FreeBSD: Verwenden Sie getifaddrs .
  • Solaris, verwenden Sie SIOCGLIFCONF .
  • AIX, verwenden Sie 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).
Nicholas Wilson 23.12.2013, 12:44
quelle
3

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).

    
alk 23.12.2013 12:41
quelle

Tags und Links