J'ai un serveur Linux et je souhaite 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 veux seulement une occurrence , de sorte que la sortie se lit comme suit:
2001:410:0:39:221:28ff:fe46:eef4
ip -6 addr
montrera vos adresses IPv6.
/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 inet6
ressemble à 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 réglage 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 ^fe80
pour exclure toute ligne commençant par ::1
ou fe80
.
$ /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 voulez 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 commun 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
Utilisez la commande suivante pour afficher votre adresse IP sous Linux:
ifconfig
Normalement, l'adresse IPv6 ressemble à 2001:5c0:9168::/48
. Si vous rencontrez des conflits dans votre IP, suivez les étapes ci-dessous pour redéfinir une adresse IP:
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'adresse IP par défaut via
ip -f inet6 ro add default via 2001:5c0:9168::1 dev eth0
Une fois votre installation terminée, il vous suffit de reconfigurer/redémarrer vos services compatibles IPv6, tels que Apache, SSH, etc.
Avec quelques petites modifications, votre tentative initiale aurait fonctionné:
ip -o -6 addr show eth0 | sed -e 's/^.*inet6 \([^ ]\+\).*/\1/'
Le gros changement est l'ajout de l'indicateur -o
à l'impression des entrées, une par ligne, ce qui facilite leur exécution.
Tout d’abord, vous devez vous rappeler qu’avec IPv6, toute machine peut avoir plusieurs adresses IPv6, des réseaux distincts et l’une quelconque d’entre elles pouvant être utilisées, en fonction de l’endroit que vous souhaitez atteindre.
Donc, avant de pouvoir répondre à la question de votre adresse IP source, vous devez décider où vous envoyez le trafic. Ensuite, vous pouvez simplement demander à Linux de vous indiquer quelle adresse IPv6 sera la source lorsque vous envoyez du trafic vers cette destination.
Si vous l'envoyez sur "Internet", choisissez simplement une adresse IPv6 globale au hasard, par exemple. 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
Ceci demande à Linux le chemin vers cette destination. Perl analyse le résultat à la recherche de src
, puis 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