42 votes

Comment puis-je obtenir mon adresse IP publique à partir de la ligne de commande, si je suis derrière un routeur?

Y a-t-il un moyen pour moi d'obtenir mon adresse IP publique (WAN) en ligne de commande ? Je suis derrière un routeur (réseau LAN), avec une adresse IP dynamique attribuée par mon FAI.

J'ai vu des solutions utilisant un service externe (comme ifconfig.me), mais je veux savoir si je peux le faire sans service externe.

30voto

Batur Points 11

En supposant que votre système possède 2 périphériques Ethernet, eth0 and eth1 et que eth0 est connecté à votre LAN, disons les adresses IP 192.168.1.X et votre périphérique eth1 est connecté à votre Fournisseur d'Accès Internet (FAI) (WAN), vous voudrez utiliser la commande ifconfig suivante pour obtenir votre IP du côté WAN.

REMARQUE: Les 2 premières méthodes supposent que vous les exécutez sur un ordinateur possédant 2 périphériques Ethernet dont l'un est connecté à votre FAI (modem câble et/ou modem DSL). Dans ce scénario, le périphérique Ethernet (eth1) sera configuré avec votre adresse IP sur Internet (IP WAN).

1ère méthode

                          +------------------------+
  +--------+    WAN IP    |   Ordinateur qui veut   |  LAN IP
  |Internet|--------------| connaître son IP WAN     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+

% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33

Vous pouvez également utiliser la commande ip.

% ip addr show eth1 | awk '/inet/ {print $2}' | sed 's#/.*##'
54.234.1.33

2ème méthode

Si vous avez besoin de trouver cette information à partir d'un système se trouvant uniquement sur le LAN, vous pourriez configurer une clé SSH sans passphrase et l'ajouter à un compte sur votre machine LAN afin qu'elle puisse accéder à distance au système disposant de l'accès WAN de la manière suivante.

                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Ordinateur qui  |
  |Internet|----------------|serveur-distant|-----------------| veut connaître  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ son IP WAN   |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+

% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -e s/addr://"
54.234.1.33

3ème méthode

Si vous ne pouvez pas vous connecter en SSH à la boîte disposant de l'accès WAN et que vous utilisez un routeur/commutateur domestique tel qu'un boîtier Linksys ou Netgear. Vous pourriez être en mesure d'obtenir l'IP à partir de ce dispositif via une page de statut HTTP. J'ai fait cela dans le passé également, quelque chose de similaire à ce qui est décrit dans ce forum post whatismyip.com.

                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Ordinateur qui  |
  |Internet|----------------|routeur/commutateur|-----------------| veut connaître  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ son IP WAN   |
                              192.168.1.1                  |eth0|------------+
                                                           +----+

# quelque chose comme ceci....

% wget -q -O - http://:@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2

REMARQUE: Cette approche dépend fortement du routeur/commutateur que vous possédez, que ce soit une marque Linksys, Netgear, etc.. Chacun aura sa propre page unique avec l'IP WAN dessus.

4ème méthode

Envoyer une requête à un site Internet externe qui vous rapportera votre adresse IP WAN.

REMARQUE: Je suis conscient que la question originale mentionnait qu'ils cherchaient des alternatives à cette approche mais je la mets ici afin que cette réponse couvre toutes les bases.

                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Ordinateur qui |
  |whatsmyip.com|---|Internet|---|routeur|---------------| veut connaître |
  +-------------+   +--------+   +------+  192.168.1.x +----+ son IP WAN    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+

# 1er serveur
% wget -qO - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2ème serveur
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
54.234.1.33

# 3ème serveur
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)

`

Des informations supplémentaires sont disponibles ici : COMMENT FAIRE : Vérifier votre adresse IP externe en ligne de commande

`

12voto

Ivy Points 759

Il existe un service web qui vous donnera votre adresse IP lorsque vous la contactez :

curl ifconfig.me

12voto

Tr1et Points 379

Quand vous êtes derrière un routeur NAT avec UPNP, vous pouvez utiliser miniupnpc pour détecter l'adresse IP du réseau étendu :

# Configuration debian/ubuntu : 
# sudo apt-get install miniupnpc

# obtenir l'adresse IP WAN du routeur UPNP :
upnpc -s | grep ^ExternalIPAddress | cut -c21-

Vous pourriez l'utiliser dans un script par exemple pour cron :

#!/bin/bash
#
# Dans cet exemple, lynx est utilisé comme client http. vous pourriez aussi utiliser autre chose
# comme wget etc.
# Configuration lynx debian/ubuntu : 
#
# apt-get install lynx
#

EXTIP=`upnpc -s | grep ^ExternalIPAddress | cut -c21-`
DDNSURL="http://votre-service-ddns.com/update/my/ip/to/$EXTIP"
TFILE=/tmp/.WAN_IP
if [ -f $TFILE ]; then
        OXTIP=`head -1 $TFILE`
else
        touch $TFILE
        OXTIP="NULL"
fi
if [ "$EXTIP" != "$OXTIP" ]; then
        mv $TFILE "$TFILE~"
        echo "$EXTIP" > $TFILE
        lynx -source $DDNSURL > /dev/null
        echo "================================"
        date
        echo "WAN_IP = $EXTIP"
fi

6voto

reach3r Points 1

Très probablement, le routeur doit fournir un moyen d'obtenir l'IP externe si aucun service externe ne peut être utilisé (comme l'ont déjà indiqué certaines autres réponses). Pour les services externes, dans la plupart des autres réponses, un service web est utilisé. Cette réponse sur Unix SE suggère d'utiliser à la place DNS.

Par exemple, en utilisant dig avec OpenDNS en tant que résolveur:

dig +short myip.opendns.com @resolver1.opendns.com

5voto

rhasti Points 212

Obtenez des informations à partir de votre routeur via ssh ou curl.

J'utilise curl pour demander à dyndns mon ip publique mais une telle commande ne semble pas applicable pour vous, n'est-ce pas?

curl http://checkip.dyndns.org 2> /dev/null| perl -pe 's,.*Address: (\d+\.\d+\.\d+\.\d+).*,$1,'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X