web-dev-qa-db-fra.com

Comment trouver l'adresse IP de mon ordinateur à l'aide du shell bash?

De temps en temps, je dois démarrer le serveur de développement Django et le faire voir par d'autres machines de mon réseau, comme décrit ici:

http://docs.djangoproject.com/en/dev/ref/Django-admin/#runserver

L’adresse IP de ma machine a tendance à changer de temps en temps, alors j’aimerais avoir un petit alias Shell ou quelque chose qui crache la commande manage.py avec l’adresse IP actuelle de ma machine, peut-être comme ceci:

python manage.py runserver $(COMMAND TO FIND MY MACHINE’S IP ADDRESS GOES HERE):8000
23
Paul D. Waite
ifconfig en0 | grep inet | grep -v inet6

La sortie ci-dessus devrait être sous la forme suivante:

inet 192.168.111.1 masque de réseau 0xffffff00 diffusion 192.168.111.255

Ajoutez une instruction awk pour imprimer la deuxième colonne afin d'éviter d'utiliser cut (awk est un outil unix assez standard):

ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'

J'utilise ce qui suit pour obtenir l'adresse IP actuelle sur un réseau local où les premiers numéros de l'adresse IP sont toujours les mêmes (remplacez 192.168.111 par vos propres numéros):

ifconfig | grep 192.168.111 | awk '{print $2}'

Pour obtenir l'adresse IP d'une autre machine dont vous connaissez le nom, essayez (remplacez le nom d'hôte et 192.168.111 par vos propres valeurs):

ping -c 1 hostname | grep 192.168.11 | grep 'bytes from' | awk '{print $4}' | sed 's/://g'
49
Valentin Rocher

Vous êtes peut-être déjà au courant, mais en cours d'exécution 

python manage.py runserver 0.0.0.0:8000

rend votre machine visible pour tout le monde sur le réseau.

Y a-t-il une raison pour laquelle vous auriez besoin de spécifier votre adresse IP?

15
Joey Robert

Cela devrait fonctionner aussi bien que d'autres commandes que j'ai déjà vues:

ifconfig eth0 | grep inet | awk '{print $2}' | cut -d':' -f2
  • Remplacez eth0 par l'interface souhaitée (eth0, eth1, wlan0 ...)

I t̶h̶i̶n̶k̶ y̶o̶u̶ ̶c̶a̶n̶ a̶l̶s̶o̶ w̶r̶i̶t̶e: ̶

̶ ̶ ̶ho̶s̶tnam̶e̶-̶I̶ | ̶cu̶t̶-̶d'̶'̶-̶f̶1̶

7
ederollora

La meilleure solution serait de:

ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
5
Stoic

C'est un moyen rapide et sale, qui fonctionne sous OSX

/sbin/ifconfig | grep 'inet ' | grep -v '127.0.0.1' | head -n1 | awk '{print $2}'

Obtenez essentiellement toutes les interfaces avec une adresse IPV4, ignorez localhost puis obtenez la première interface.

En outre, utilisez le chemin d'accès à ifconfig. J'ai vu de nombreux freins de script Shell utilisés par ex. cron à cause de l’échec de PATH.

4
stjernstrom

Les gens utilisent des nombres de caractères pour extraire les bonnes colonnes de la ligne d'adresse ip, mais l'utilisation d'espaces comme délimiteurs le rend plus évolutif en adresses de longueur différente ...

ifconfig en1 | grep inet | grep -v inet6 | cut -d" " -f2
4
Matt Crampton

La commande suivante fonctionne parfaitement pour moi sous RHEL 6.3:

 ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
3
SMQ

ifconfig est probablement ce que vous recherchez. Cependant, vous devrez soit exécuter grep pour filtrer une partie du bruit.

3
James Gregory

Sur Mac OS X 10.11.6 El Capitan (et probablement des versions plus anciennes), vous pouvez imprimer votre IP avec

ipconfig getifaddr <device>

<device> est en0, en1, etc.

http://osxdaily.com/2010/11/21/find-ip-address-mac/

3
Heath Borders

Cela n’est peut-être pas aussi élégant que d’autres solutions, mais cela fonctionne sur les systèmes Linux et est plus réconfortant à regarder qu’une regex:

ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | awk -F ':' '{print $2}'
2
Eric Lubow

Essayez ceci (si vous êtes un utilisateur Arch)

resolveip -s $HOSTNAME

Alternative

Pour obtenir une adresse IPv4, vous pouvez utiliser:

Host $(uname -n) | grep "address" | grep -v "IPv6" | head -n 1 | awk '{print $4}'

Pour obtenir un IPv6:

Host $(uname -n) | grep "IPv6 address" | head -n 1 | awk '{print $5}'

Vous pouvez remplacer $ (uname -n) par $ (nom d'hôte) si vous le souhaitez.

1
oblalex

Ceci vérifie votre interface par défaut et l’utilise pour récupérer votre adresse IP principale. Utile lorsque vous avez plusieurs interfaces et des tonnes d’adresses IP virtuelles:

netstat -rn | gawk '/UG/ {print $NF}' | xargs ifconfig | gawk 'match($0,/inet addr:(.*) B/,a) {print a[1]}'
0
Monty Montemayor

Commande simple pour affiner l'adresse IP avec l'interface par défaut.

ip route | grep src | awk '{print $NF; exit}'

Testé sur tous les systèmes d'exploitation Unix

0
M.S.Arun

Récapitulatif: si vous souhaitez copy/paste en ligne de commande et obtenir simplement l'adresse IP du réseau, voici ce qui fonctionne sur Mac (sur WiFi):

echo $(ifconfig en0 | grep inet | grep -v inet6 | cut -d" " -f2)

Voici l’assignation à la variable de script bash:

LOCAL_IP=$(ifconfig en0 | grep inet | grep -v inet6 | cut -d" " -f2)

Ceci est basé sur les réponses de Valentin Rocher et Matt Kropmton

0
C0D3LIC1OU5

Voici une solution pour trouver l'adresse IP actuelle:

route -n get default|grep interface|awk ‘{ print $2 }’|xargs ipconfig getifaddr

testé sur Mac uniquement.

0
Mat