Commande Shell pour obtenir l'adresse IP?


Réponses:



25

Vous pouvez utiliser:

/bin/ip addr

3
@opierce Vous avez marqué la réponse de mpbloch comme correcte, mais en tant que FYI, vous devriez utiliser cette réponse, car elle fait partie de la suite iproute2. ifconfigest progressivement mis en place.
jwbensley

3
Vous pouvez raccourcir cela en exécutant simplement ip a.
gak

19

Si vous avez une adresse interne utilisée, vérifiez

curl http://myip.dnsomatic.com

pourrait être une bonne idée sur les shells Unix.
Ou, connectez simplement cette URL dans votre navigateur.


Si vous obtenez une réponse différente de la « ifconfig -a» résultat,
l' ifconfiga donné votre adresse interne - qui ne sera probablement pas travailler à l' extérieur.


Même si tout semble bien, vous pourriez avoir un pare-feu en place qui interdira les connexions ssh entrantes .
À quel moment vous devriez essayer le port d'intérêt à partir d'un navigateur sur la machine à,

http://www.canyouseeme.org/

Cela confirmera la connectivité à travers,

  • adresse IP externe (vous la montrant sur cette page)
  • NAT, port vers l'avant
  • Pare-feu

Certes, mais si tel est le cas, il n'y a probablement pas de règles NAT / Port Forwarding en place pour faire correspondre ssh à l'adresse IP interne.
Kyle Brandt

@Kyle, qui peut être ajouté ...
nik

3
+1 pourcurl http://myip.dnsomatic.com
JatSing

Similaire à cela, il y a aussicurl ifconfig.me
jwbensley

19

/bin/hostname -i


3
Dans ce cas, je suggère d'utiliser hostname --all-ip-addresses. Affichez toutes les adresses réseau de l'hôte. Cette option énumère toutes les adresses configurées sur toutes les interfaces réseau. L'interface de bouclage et les adresses de liaison locale IPv6 sont omises. Contrairement à l'option -i, cette option ne dépend pas de la résolution de nom. Ne faites aucune hypothèse sur l'ordre de sortie.
lrkwz

5
Alternative plus courte au commentaire de @ lrkwz/bin/hostname -I
hanxue

Merci @hanxue - cela devrait être sa propre réponse - la commande la plus courte avec la sortie la plus propre - juste ce que je cherchais! D'après mon expérience (Ubuntu), /bin/hostname -idonne juste 127.0.1.1, ce qui est inutile.
Roger Dueck


9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

Si vous avez besoin de votre adresse interne, ajoutez votre interface après ifconfig, par exemple

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

+1, c'est exactement ce dont j'avais besoin pour résoudre un problème. Vive les one-liners!
J.Polfer

+1 Sans la tête -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {print $ 3}'
joeslice

Merci, cela fonctionne sur Debian mais sur OS X cela ne fonctionne pas, renvoyant des ordures. Ce serait formidable si nous pouvions créer une ligne qui fonctionne sur les deux. Voici la sortie d'ifconfig sur OS X: gist.github.com/ssbarnea/5814657
sorin


3

Si vous avez besoin de connaître l'adresse IP de votre routeur, vous pouvez exécuter cette commande.

dig + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

Si vous utilisez OpenDNS pour votre serveur DNS, vous pouvez le raccourcir en:

creuser + court myip.opendns.com

Vous pouvez également utiliser cette commande.

curl http://myip.dnsomatic.com

3

Si vous avez plusieurs interfaces, il pourrait être utile de spécifier celle que vous souhaitez IP. si vous voulez l'adresse IPV4 de l'interface 'eth0':

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

si vous voulez l'adresse IPV6 de l'interface 'eth0':

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

si vous souhaitez rechercher une IP entre deux interfaces communes d'un ordinateur portable, wlan0 et eth0:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done

3

Courbez simplement cette page :

$ curl wtfismyip.com/text


Et en quoi est-ce exactement supérieur aux services similaires déjà mentionnés au cours de ces années?
Esa Jokinen

2

Voici une ligne qui fonctionne également sur Linux et OS X, et elle renverra la première adresse qui n'est pas locale:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

Envoyez des crédits à /programming//a/13322549/99834



1

La façon la plus simple de s'y prendre est probablement

ifconfig eth0

en supposant que la machine a une seule adresse IP sur l'interface filaire par défaut - vous pourriez avoir besoin

ifconfig wlan0

si c'est sur WiFi.


1
ip address show scope link

Il vous montrera l'adresse IP de la vie - a des interfaces de liaison. Mais ce n'est pas une commande bash. Bash n'a aucune capacité à connaître l'IP et le réseau.


1

Ce que je comprends, c'est que vous voulez connecter une machine Ubuntu distante qui a une adresse IP dynamique. Allez sur le site dyndns.org et ouvrez un compte gratuit. Ensuite, sur la machine distante, vous devez installer un outil IP dynamique.

sudo aptitude install dyndns-client

vous pouvez donc ssh machine distante via

ssh username@yourdynamicnamealias.dyndns.org

Ainsi, après la configuration, vous n'aurez jamais besoin de l'adresse IP de la machine distante.


C'est ma méthode préférée pour gérer les adresses IP dynamiques. dyndns.org est un service fantastique et gratuit.
John Barrett

1

Voici ce que j'utilise:

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'

1

si vous n'avez besoin que d'une seule IP d'une interface donnée, vous pouvez faire:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 


0

Si vous recherchez une adresse IP publique de la boîte , vous pouvez utiliser les éléments suivants:

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

Vous pouvez utiliser des dig(1)options telles que -4ou -6pour rechercher spécifiquement une adresse IPv4 ou IPv6; Google fournira une réponse dans un enregistrement de TXTtype, qui sera entouré de guillemets lorsqu'il sera présenté par dig; si vous souhaitez utiliser ultérieurement la variable avec des utilitaires comme traceroute, vous devez utiliser quelque chose comme tr (1) pour supprimer lesdites citations.

Les autres options incluent whoami.akamai.netet myip.opendns.com, qui répondent avec Aet AAAAenregistre (au lieu de TXTcomme dans l'exemple ci-dessus de Google), donc, elles ne nécessitent pas la suppression des guillemets:

  • dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

  • dig -4 @resolver1.opendns.com -t any myip.opendns.com +short

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

Voici un exemple de script qui utilise toutes les options ci-dessus pour définir les variables:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

Si vous recherchez une adresse IP privée ou un ensemble de toutes les adresses IP attribuées à la boîte, vous pouvez utiliser une combinaison de ifconfig(sur BSD et GNU / Linux), ip addr(sur GNU / Linux), hostname(options -iet -Isur GNU / Linux) et netstatpour voir ce qui se passe.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.