GNU/Linux >> Tutoriels Linux >  >> Linux

Script bash Linux pour extraire l'adresse IP

ip -4 addr show eth0 | grep -oP "(?<=inet ).*(?=/)"

Pour obtenir simplement votre adresse IP :

echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`

Cela vous donnera l'adresse IP de eth0.

Edit :En raison des changements de nom des interfaces dans les versions récentes d'Ubuntu, cela ne fonctionne plus. À la place, vous pouvez simplement utiliser ceci :

hostname --all-ip-addresses ou hostname -I , qui fait la même chose (vous donne TOUTES les adresses IP de l'hôte).


Si l'objectif est de trouver l'adresse IP connecté en direction d'Internet, cela devrait être une bonne solution.

Edit 2021 :Ajout des versions "sed" et "grep" et des nouvelles versions "awk" (certaines sont gnu)

Pour trouver quels adders IP sont utilisés connectés à Internet, nous pouvons utiliser le ip route commande. Avec la nouvelle version de Linux, vous obtenez plus d'informations avec une sortie typique comme celle-ci :

ip route get 8.8.8.8
8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002
    cache

donc pour obtenir IP vous devez trouver l'IP après src , en utilisant awk , sed ou grep

ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/src (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/src/)$0=$(i+1)}NR==1'

ip route get 8.8.8.8 | sed -E 's/.*src (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*src \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed  -nE '1{s/.*?src (\S+) .*/\1/;p}'

ip route get 8.8.8.8 | grep -oP 'src \K[^ ]+'
10.36.15.150

et si vous aimez l'interface nom en utilisant awk , sed ou grep

ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/dev (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)$0=$(i+1)}NR==1'

ip route get 8.8.8.8 | sed -E 's/.*?dev (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*dev \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed  -nE '1{s/.*?dev (\S+) .*/\1/;p}'

ip route get 8.8.8.8 | grep -oP 'dev \K[^ ]+'
ens192

ip route n'ouvre aucune connexion, il montre simplement l'itinéraire nécessaire pour se rendre à 8.8.8.8 . 8.8.8.8 est le DNS de Google.

Si vous souhaitez stocker ceci dans une variable, faites :

my_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')

my_interface=$(ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}')

Pourquoi une autre solution peut échouer :

ifconfig eth0

  • Si l'interface que vous avez a un autre nom (eno1, wifi, venet0 etc)
  • Si vous avez plusieurs interfaces
  • Le sens de connexion IP n'est pas le premier dans une liste de plusieurs IF

Hostname -I

  • Peut obtenir uniquement le 127.0.1.1
  • Ne fonctionne pas sur tous les systèmes.
  • Donnez à toutes les adresses IP, pas seulement à celles connectées à Internet. -I, --all-ip-addresses toutes les adresses de l'hôte

Si vous souhaitez obtenir une liste de vos adresses IP séparées par des espaces, vous pouvez utiliser le hostname commande avec le --all-ip-addresses (court -I ) drapeau

hostname -I

comme décrit ici :Mettre l'adresse IP dans la variable bash. Existe-t-il un meilleur moyen ?


Linux
  1. Comment utiliser un mot de passe crypté dans le script Linux Bash Shell

  2. Analyser l'historique de Bash sous Linux

  3. Modification du mot de passe du système Linux dans le script bash

  4. Comment déboguer un script bash ?

  5. Comment résoudre un nom d'hôte en adresse IP dans un script bash ?

35 exemples de scripts bash

Comment trouver une adresse IP sous Linux

Comment exécuter un script bash

Comment changer l'adresse IP sous Linux

Extraire le fichier tar.gz sous Linux

Script Shell/Bash pour trouver des nombres premiers sous Linux