J'essaie d'utiliser uniquement l'adresse IP (inet) comme paramètre dans un script que j'ai écrit.
Existe-t-il un moyen simple dans un terminal Unix d'obtenir uniquement l'adresse IP, plutôt que de regarder à travers ifconfig
?
shell
unix
ip-address
le maçon
la source
la source
ip -o address
est beaucoup plus facile à utiliser que la sortie deip address
.Réponses:
Vous pouvez écrire un script qui ne renvoie que l'adresse IP comme:
Pour Mac:
Ou pour le système Linux
la source
hostname -i
sur le mien il retourne:::1 127.0.1.1 192.168.1.100
hostname
n'est pas portable.Cela vous donnera toutes les interfaces IPv4, y compris le bouclage 127.0.0.1:
Cela ne montrera que
eth0
:Et de cette façon, vous pouvez obtenir des adresses IPv6:
Uniquement
eth0
IPv6:la source
grep -oP
échec sur busybox v1.24.1: option non valide - P-P
commutateur pour les expressions régulières Perl, sinon nous ne pouvons pas utiliser le(?<=inet\s)
jeton lookbehind . Vous pouvez obtenir un résultat similaire en exécutantgrep -oe 'inet [0-9\.]\+'
ou,grep -oe 'inet6 [0-9a-f:]\+'
mais de cette façon, je ne peux pas me débarrasser du premier mot. Dans lesman grep
rapports SuSE , ce-P
drapeau est expérimental.ip -4 a show eth0 | grep -Po 'inet \K[0-9.]*'
En général, il n'est jamais garanti qu'un système n'aura qu'une seule adresse IP, par exemple, vous pouvez avoir à la fois une connexion Ethernet et WLAN, et si vous avez une connexion VPN active, vous aurez une autre adresse IP.
Linux
Sous Linux,
hostname -I
listera la ou les adresses IP actuelles. S'appuyer dessus en retournant toujours une seule adresse IP ne fonctionnera probablement pas comme prévu dans certains scénarios (c'est-à-dire qu'une liaison VPN est active), donc un moyen plus fiable serait de convertir le résultat en un tableau, puis de boucler sur les éléments:OSX
Sous OSX, si vous connaissez l'interface , vous pouvez utiliser:
qui renverra juste l'adresse IP.
Ou vous pouvez faire une boucle sur les noms d'interface possibles, en commençant par un suffixe, c'est
en
-à- dire :En outre, l'obtention de l'adresse IP devient non déterministe dans le cas où des connexions par câble et wifi sont établies, lorsqu'une machine a plus d'une interface Ethernet ou lorsque des tunnels VPN sont présents.
Obtention de l'adresse IP externe
Si vous avez besoin de l'adresse IP externe, vous pouvez interroger un service en mode texte, par exemple
curl https://ipecho.net/plain
renvoyer une adresse IP externe en texte brut .Et un moyen encore plus rapide d'obtenir l'adresse IP externe consiste à interroger un serveur DNS connu:
la source
Cette commande vous donnera l'adresse IP exacte que vous voulez dans Ubuntu.
la source
Sur les dernières versions d' Ubuntu ( 14.04 - 16.04 ), cette commande a fait l'affaire pour moi.
la source
print $1
peut ou non vous donner le résultat correct.Si votre environnement est limité, vous pouvez utiliser cette commande:
la source
ip -o -4 addr show dev eth0 | cut -d' ' -f7 | cut -d'/' -f1
ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
. Pour la v4 et la v6:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
ip -4 addr show eth0 | grep inet
faire un:ip -4 addr show | grep 192
Pour obtenir uniquement l'adresse IP sous Mac OS X, vous pouvez taper la commande suivante:
la source
La commande
ifconfig
est obsolète et vous devez utiliser laip
commande sous Linux.Vous
ip a
donnera également une portée sur la même ligne que IP, ce qui facilite son utilisation.Cette commande vous montrera votre IP globale (externe):
Tous IPv4 (également 127.0.0.1):
Tout IPv6 (aussi :: 1):
la source
Nous pouvons simplement utiliser seulement 2 commandes (ifconfig + awk) pour obtenir juste l'IP (v4) que nous voulons comme ceci:
Sous Linux, en supposant obtenir l'adresse IP de l'
eth0
interface, exécutez la commande suivante:Sous OSX, en supposant d'obtenir l'adresse IP de l'
en0
interface, exécutez la commande suivante:Pour connaître notre IP publique / externe, ajoutez cette fonction dans
~/.bashrc
Puis cours,
whatismyip
la source
Pour imprimer uniquement l'adresse IP de
eth0
, sans autre texte:Pour déterminer votre interface principale (car elle n'est peut-être pas "eth0"), utilisez:
Les deux lignes ci-dessus peuvent être combinées en une seule commande comme celle-ci:
la source
Je voulais quelque chose de simple qui fonctionnait comme un alias Bash. J'ai trouvé que cela
hostname -I
fonctionnait le mieux pour moi (hostname v3.15).hostname -i
renvoie l'adresse IP de bouclage, pour une raison quelconque, maishostname -I
me donne l'adresse IP correcte pour wlan0, et sans avoir à diriger la sortie via grep ou awk. Un inconvénient est que toutes les adresses IPhostname -I
seront affichées, si vous en avez plusieurs.la source
Cela ferait l'affaire dans un Mac:
Cela a résolu
ping 192.168.1.2
dans ma machine.Astuce de pro :
$(...)
signifie exécuter tout ce qui se trouve à l'intérieur des parenthèses dans un sous-shell et le renvoyer comme valeur.la source
Il
man hostname
existe un moyen encore plus simple d'exclure automatiquement les adresses IP de bouclage et d'afficher uniquement la liste séparée par des espaces de toutes les adresses IP attribuées aux hôtes:la source
Vous pouvez également utiliser la commande suivante:
REMARQUE: cela ne fonctionnera que si vous êtes connecté à Internet.
la source
Peu de réponses semblent utiliser la nouvelle
ip
commande (pour remplacerifconfig
) voici donc celui qui utiliseip addr
,grep
etawk
pour imprimer simplement l'adresse IPv4 associée à l'wlan0
interface:Bien que ce ne soit pas la solution la plus compacte ou la plus sophistiquée, elle est (sans doute) facile à comprendre (voir l'explication ci-dessous) et à modifier à d'autres fins, telles que l'obtention des 3 derniers octets de l'adresse MAC comme ceci:
Explication:
ip addr show wlan0
renvoie des informations associées à l'interface réseau nomméewlan0
, qui doivent être similaires à ceci:Suivant les
grep inet
filtres sur les lignes qui ne contiennent pas « iNet » (IPv4 et IPv6 configuration) et lesgrep -v inet6
filtres sur les lignes restantes qui font contenir « inet6 », ce qui devrait se traduire par une seule ligne comme celui - ci:Enfin, le premier
awk
extrait le champ "172.18.18.1/24" et le second supprime le raccourci du masque de réseau, ne laissant que l'adresse IPv4.De plus, je pense qu'il vaut la peine de mentionner que si vous créez des scripts, il existe souvent de nombreux outils plus riches et / ou plus robustes pour obtenir ces informations, que vous voudrez peut-être utiliser à la place. Par exemple, si vous utilisez Node.js, il y en a
ipaddr-linux
, si vous utilisez Rubylinux-ip-parser
, etc.Voir aussi /unix/119269/how-to-get-ip-address-using-shell-script
la source
Utilisez la commande suivante:
la source
Voici ma version, dans laquelle vous pouvez passer une liste d'interfaces, classées par priorité:
Donc, si je suis connecté avec VPN, Wifi et Ethernet, mon adresse VPN (sur l'interface tap0) sera retournée. Le script fonctionne à la fois sous Linux et osx, et peut prendre des arguments si vous souhaitez remplacer IFLIST
Notez que si vous souhaitez utiliser IPV6, vous devrez remplacer «inet» par «inet6».
la source
Je finis toujours par avoir besoin de cela aux moments les plus inattendus et, sans faute, je finis par chercher des fils comme celui-ci sur SO. J'ai donc écrit un script simple pour obtenir les adresses IPv4 via netstat, appelé
echoip
- vous pouvez le trouver ici . Le bash pour les adresses réseau ressemble à ceci, il obtient également votre adresse publique de ipecho.net:Le
echoip
script produit une sortie comme celle-ci:la source
utilisez ce script en une ligne:
ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}'
mac et linux (testé sous ubuntu) fonctionnent tous les deux.la source
ifconfig en0
ouifconfig eth1
etc si vous connaissez l'interface que vous voulez :)Je préfère ne pas utiliser
awk
et tel dans les scripts ..ip
a la possibilité de sortir en JSON.Si vous omettez,
$interface
vous obtenez toutes les adresses IP:la source
bash ip -j addr show eth0 | jp "[0].addr_info[?family== 'inet'].local | [0]"
montre toutes vos ips
la source
Sur Redhat 64bit, ce problème a résolu pour moi.
la source
la source
Lorsque vous recherchez votre adresse IP externe sur un hôte NAT, de nombreuses réponses suggèrent d'utiliser des méthodes basées sur HTTP comme
ifconfig.me
par exemple:Au fil des années, j'ai vu beaucoup de ces sites aller et venir, je trouve cette méthode basée sur le DNS plus robuste:
J'ai cet alias pratique dans mon
~/.bashrc
:la source
Ces deux méthodes ont fonctionné pour moi:
Pour obtenir l'adresse IP de votre interface eth0. Remplacez eth0 dans l'exemple ci-dessous par le nom de votre interface.
ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d" "
Utilisation du nom d'hôte: Cela vous donnera l'inet ie IPAddress de votre etho. en utilisant -I vous donnera la valeur inet de toutes les interfaces où que cette valeur soit présente.
hostname -i
la source
Cela renvoie uniquement l'adresse IP de votre système.
la source
J'utiliserais
Hostname -L
pour obtenir uniquement l'adresse IP à utiliser comme variable dans un script.la source
hostname -i
ouhostname -I
?user@linux:~$ Hostname -L -bash: Hostname: command not found user@linux:~$
1. Le capitalH
est faux 2. Pas de tel-L