Commande Shell pour obtenir l'adresse IP?

24

Existe-t-il une commande bash pour trouver l'adresse IP d'une boîte Ubuntu? J'ai besoin de trouver l'adresse IP pour pouvoir plus tard entrer dans la machine.

opierce
la source

Réponses:

32

/sbin/ifconfig -a

mpbloch
la source
Oui et si vous envisagez d'administrer le serveur à distance, vi /etc/network/interfaceset définissez l'interface sur static(voir help.ubuntu.com/8.10/serverguide/C/network-configuration.html )
gravyface
L'exécution de cette commande révèle toute une liste de nombres. Lequel devrions-nous utiliser? Le inet addr?
ComputerScientist
25

Vous pouvez utiliser:

/bin/ip addr
Robert Swisher
la source
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
nik
la source
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

James
la source
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}'
Johan
la source
+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
Brad Gilbert
la source
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
LoreLLo
la source
3

Courbez simplement cette page :

$ curl wtfismyip.com/text

mansi
la source
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

Sorin
la source
2
LOCAL_IP=`/bin/hostname -I | sed 's/ //g'`
Mohammed Saqib Rajput
la source
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.

David North
la source
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.

Saabi
la source
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.

homme de pluie
la source
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 };
    }'
jlliagre
la source
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 }' 
DmitrySemenov
la source
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.

cnst
la source