Comment obtenir l'adresse IP IPv6 sous Linux


35

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

Ma commande 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 ne veux qu'une seule occurrence , pour que la sortie indique:

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

écrire un script shell et y mettre ces commandes: voila, vous avez maintenant créé une commande "unique".
akira

4
Lorsqu'il s'agit d'IPv6, il n'est pas vraiment recommandé de limiter à une seule adresse. Il peut y avoir plusieurs adresses globales, plusieurs adresses de lien local, plusieurs adresses de site local ...
grawity

Réponses:


31
ip -6 addr

affichera vos adresses IPv6.


% ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever... toujours en prise
akira

1
Cela ne résout pas la question posée. OP souhaite qu'une seule ligne de commande récupère un IPv6 (ce qui signifie probablement le principal public). Donc, soit ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'ou ip -6 addr show dev eth0 | awk '/inet6/{print $2}'pourrait être utilisé comme base et OP peut les étendre / modifier pour son cas d'utilisation spécifique.
rwenz3l

6

/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80

La sortie de /sbin/ip -6 addr | grep inet6ressemble à ceci:

inet6 ::1/128 scope host 
inet6 2001:123:456:55f::1/64 scope global 
inet6 fe80::62eb:69ff:fed2:d2a6/64 scope link 

awk -F '[ \t]+|/' '{print $3}'divise chaque délimiteur de paramètre de ligne en un ou plusieurs espaces blancs ou une barre oblique. La partie dont nous avons besoin est le 3 $.

grep -v ^::1 | grep -v ^fe80pour exclure toute ligne commençant par ::1ou fe80.


il y a beaucoup trop de tuyaux de grep dans awk, cela pourrait être collaspe en un seul awk `awk -F '[\ t] + | /' '$ 3 ==" :: 1 "{next;} $ 3 ~ / ^ fe80 ::/ { suivant ; } / inet6 / {print $ 3} ''
Archemar

3
$ /sbin/ifconfig | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link
      inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
      inet6 addr: ::1/128 Scope:Host

Si vous souhaitez une sélection aléatoire d'une adresse IPv6

$ /sbin/ifconfig | grep inet6 | head -n 1
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

Si vous voulez l'adresse IPv6 du nom le plus courant pour le premier adaptateur Ethernet

$ /sbin/ifconfig eth0 | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

Si vous voulez juste l'adresse

$ /sbin/ifconfig eth0 |  awk '/inet6/{print $3}'
fe80::2ff:19ff:fe60:1a00/64

2

Utilisez la commande suivante pour afficher votre adresse IP sous Linux:

ifconfig

Normalement, l'adresse IPv6 ressemble 2001:5c0:9168::/48. Si vous rencontrez un conflit dans votre IP, suivez les étapes ci-dessous pour définir à nouveau une adresse IP:

  1. Pour attribuer des IP IPv6, assurez-vous que les outils iproute2 sont installés.
  2. En les utilisant, commençons à attribuer vos IP.
  3. Assurez-vous que le module ipv6 est installé ou non.

Ensuite, utilisez la commande suivante pour ajouter une nouvelle adresse IP:

ip -f inet6 addr add 2001:5c0:9168::2/64 dev eth0

Ensuite, ajoutez l'IP par défaut via

ip -f inet6 ro add default via 2001:5c0:9168::1 dev eth0

Après avoir terminé votre installation, reconfigurez / redémarrez simplement vos services compatibles IPv6, comme Apache, SSH, etc.


ifconfigest obsolète sous Linux et ne devrait plus être utilisé. Les distributions Linux modernes ne l'installent même plus par défaut (sauf si un ancien paquet l'exige).
Michael Hampton

1

Avec quelques petits ajustements, votre tentative initiale aurait fonctionné:

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

Le gros changement est l'ajout du -odrapeau pour que les entrées soient imprimées, une par ligne, ce qui facilite leur exécution.


0

Tout d'abord, vous devez vous rappeler qu'avec IPv6, n'importe quelle machine peut avoir plusieurs adresses IPv6, et qu'elles peuvent se trouver sur des réseaux distincts, et n'importe laquelle d'entre elles peut être utilisée, selon l'endroit où vous souhaitez vous rendre.

Donc, avant de pouvoir répondre à la question de savoir quelle est votre adresse IP source, vous devez décider où vous envoyez le trafic. Ensuite, vous pouvez simplement demander à Linux de vous dire quelle adresse IPv6 sera la source lorsque vous envoyez du trafic vers cette destination.

Si vous l'envoyez à "Internet", choisissez simplement une adresse IPv6 globale au hasard, par exemple l'adresse DNS publique de Google.

ip r get to 2001:4860:4860::8888 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
2001:db8:f387:c818:5:2:0:1000

Cela demande à Linux l'itinéraire vers cette destination. Perl analyse le résultat recherché srcpuis imprime le champ suivant.

En fournissant une destination différente, vous pouvez recevoir une adresse source différente:

ip r get to ::1 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
::1

0
ip addr show dev eth0 | sed -e's/^.*inet6 \(2001[^ ]*\)\/64 scope global dynamic.*$/\1/;t;d'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.