52 votes

Comment obtenir l'adresse IPv6 sous Linux ?

J'ai un serveur Linux et je veux trouver l'adresse IPv6 principale à l'aide d'une seule ligne de commande.

Mon commandement jusqu'à présent :

$ ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'

qui montre :

2001:410:0:39:221:28ff:fe46:eef4
fe80::221:28ff:fe46:eef4

Mais je veux une seule occurrence de façon à ce que la sortie se lise comme suit :

2001:410:0:39:221:28ff:fe46:eef4

1voto

Chad Huneycutt Points 171

Avec quelques petites modifications, votre tentative initiale aurait fonctionné :

ip -o -6 addr show eth0 | sed -e 's/^.*inet6 \([^ ]\+\).*/\1/'

Le grand changement est l'ajout du -o pour que les entrées soient imprimées, une par ligne, ce qui facilite l'exécution de sed sur ces entrées.

1voto

Althor49 Points 11

Voici un moyen avec ip et awk :

IPv4

ip addr show dev eth0 | awk '{if ($1=="inet") {print $2}}'

IPv6

ip addr show dev eth0 | awk '{if ($1=="inet6") {print $2}}'

1voto

LUXS Points 111

Pour obtenir uniquement les adresses IPv6, vous utilisez la fonction ip addr et filtrer déjà avec -6 pour les adresses IPv6 uniquement.

ip -6 addr

Si vous voulez spécifier une carte réseau, vous pouvez ajouter show dev eth0 alors que eth0 doit être remplacé par votre adaptateur réseau.

ip -6 addr show dev [eth0]

Puisque vous ne recherchez que l'adresse IP externe, vous devez ajouter un champ scope global .

ip -6 addr show dev [eth0] scope global

enfin, vous l'insérez dans votre sed commande.

ip -6 addr show dev [eth0] scope global | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'

1voto

Tom Points 445

Je sais qu'il s'agit d'une vieille question, mais personne ne l'a mentionnée. ip peut produire une sortie JSON facile à interroger :

$ ip -json address list wlo1 | jq -r '.[0].addr_info[] | select(.family=="inet6" and .scope=="global") | .local'
2001::d4ba:c7f9:1133

Évite toutes les manipulations avec sed/awk/perl/ruby/COBOL/votre outil de texte de prédilection. Ceci retournera toujours une adresse IP6 globale s'il y en a une. Il est également facile de l'adapter à d'autres familles d'adresses et à d'autres portées.

0voto

Werner Neumann Points 1
ip addr show dev eth0 | sed -e's/^.*inet6 \(2001[^ ]*\)\/64 scope global dynamic.*$/\1/;t;d'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X