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
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'
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?
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
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̶
La meilleure solution serait de:
ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
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.
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
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'
ifconfig
est probablement ce que vous recherchez. Cependant, vous devrez soit exécuter grep
pour filtrer une partie du bruit.
Sur Mac OS X 10.11.6 El Capitan (et probablement des versions plus anciennes), vous pouvez imprimer votre IP avec
ipconfig getifaddr <device>
où <device>
est en0
, en1
, etc.
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}'
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.
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]}'
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
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
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.