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

Y at-il un moyen pour moi d'obtenir mon adresse IP publique (WAN) sur la 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 en utilisant un service Web externe (tel que ifconfig.me ), mais je veux savoir si je peux le faire sans un service externe.

En supposant que votre système dispose de 2 périphériques Ethernet, eth0 et eth1 et eth0 sont connectés à votre réseau local, disons IP 192.168.1.X et votre périphérique eth1 est connecté à votre FAI (WAN), vous allez vouloir utiliser la commande ifconfig suivante Pour obtenir votre adresse IP pour le côté WAN.

REMARQUE: les 1ères 2 façons supposent que vous les exécutez sur un ordinateur doté de 2 périphériques Ethernet et que l'un d'entre eux 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 (WAN IP).

1er chemin

  +------------------------+ +--------+ WAN IP | Computer that wants | LAN IP |Internet|--------------| to know WAN IP |------------ +--------+ 54.234.1.33 | +------+ +------+ | 192.168.1.1 +-| eth1 |------| eth0 |-+ +------+ +------+ % ifconfig eth1 | awk '/inet / { print $2 }' | sed -es/addr:// 54.234.1.33 

Vous pouvez également utiliser la commande ip .

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

2ème chemin

Si vous devez le trouver à partir d'un système qui se trouve uniquement sur le réseau local, vous pouvez configurer une clé ssh sans mot de passe et l'ajouter à un compte sur votre machine LAN afin de pouvoir accéder à distance au système avec l'accès WAN.

  +----------------+ +--------+ WAN IP +-------------+ LAN IP | Computer that | |Internet|----------------|remote-server|-----------------| wants to know | +--------+ 54.234.1.33 +----+-----+----+ 192.168.1.x +----+ WAN IP | |eth1| |eth0| |eth0|------------+ +----+ +----+ +----+ % ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -es/addr://" 54.234.1.33 

3ème façon

Si vous ne parvenez pas à ssh dans la boîte qui a un accès WAN et que vous utilisez un routeur / commutateur domestique tel qu'une boîte Linksys ou Netgear. Il se peut que vous puissiez obtenir l'adresse IP de ce périphérique via une page d'état HTTP. J'ai déjà fait cela dans le passé, quelque chose de similaire à ce qui est décrit dans cette publication du forum whatismyip.com .

  192.168.1.2 +----------------+ +--------+ WAN IP +-------------+ LAN IP | Computer that | |Internet|----------------|router/switch|-----------------| wants to know | +--------+ 54.234.1.33 +-------------+ 192.168.1.x +----+ WAN IP | 192.168.1.1 |eth0|------------+ +----+ # something like this.... % wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2 

REMARQUE: cette approche dépend fortement du routeur / commutateur que vous avez, qu'il s'agisse d'une marque Linksys, Netgear, etc. Chacun aura sa propre page unique avec l'adresse IP de WAN.

4ème chemin

Envoi d'une requête sur un site Internet externe qui rapportera votre adresse IP WAN.

NOTE: Je suis conscient que la question originale mentionnait qu'ils cherchaient des solutions de rechange à cette approche, mais je la pose ici afin que cette réponse couvre toutes les bases.

  +---------------+ +-------------+ +--------+ +------+ LAN IP | Computer that | |whatsmyip.com|---|Internet|---|router|---------------| wants to know | +-------------+ +--------+ +------+ 192.168.1.x +----+ WAN IP | you're 54.234.1.33 |eth0|-----------+ +----+ # 1st server % wget -qO - http://cfaj.freeshell.org/ipaddr.cgi 54.234.1.33 # 2nd server % wget -qO - icanhazip.com 54.234.1.33 # 3rd server % curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*#\1#' 54.234.1.33 

Des informations supplémentaires sont disponibles ici: HOWTO: vérifiez l'adresse IP externe à partir de la ligne de commande

Si votre système a installé Curl (la plupart), vous pouvez utiliser

 curl ifconfig.me 

Lorsque vous êtes derrière un routeur NAT avec UPNP, vous pouvez utiliser miniupnpc pour détecter l'adresse IP wan:

 # debian/ubuntu setup: # sudo apt-get install miniupnpc # get WAN IP address from UPNP router: upnpc -s | grep ^ExternalIPAddress | cut -c21- 

Vous pouvez l'utiliser dans un script, par exemple pour cron like:

 #!/bin/bash # # In this example, lynx is used as http client. you could also use something else # like wget etc. # debian/ubuntu lynx setup: # # apt-get install lynx # EXTIP=`upnpc -s | grep ^ExternalIPAddress | cut -c21-` DDNSURL="http://your-ddns-service.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 

Obtenez des informations de votre routeur via ssh ou curl.

J'utilise curl pour demander dyndns pour mon ip public mais une telle commande ne vous paraît pas pertinente?

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

Malheureusement, il n'existe aucun moyen de détecter des mécanismes comme le NAT qui n'impliquent pas la mise en contact d'un service distant. NAT est par nature complètement transparent pour l'utilisateur, outre les services brisés, et il n'existe aucun protocole standard pour la découverte de NAT.

Mais en ce qui concerne les services externes, je dois suggérer le rapide et simple que j'ai écrit, ident.me, que vous pouvez utiliser pour IPv4 et IPv6; Pour sa forme la plus simple, vous pouvez utiliser curl ident.me et l'API complète est documentée sur http://api.ident.me/

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

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

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

La commande linux que vous recherchez est si vous confiez que vous êtes directement connecté à Internet.

Si ce n'est pas le cas et en accédant à des proxies ou à un routage spécial, la façon la plus simple (comme d'autres l'indiquent) est de se connecter / accéder à un autre hôte et de le vérifier à partir de là.

De plus, vous voudrez peut-être discuter de cette question avec votre administrateur de système de quartier amical.

Si votre routeur prend en charge NAT PMP (Port Mapping Protocol), vous pouvez récupérer votre IP publique à l'aide de natpmp.

Il existe une interface de ligne de commande vers la bibliothèque linph natpmp appelée natpmpc. Sur Ubuntu, c'est dans le package natpmp-utils . Mon routeur n'appartient pas à natpmp, donc je ne suis pas certain que l'utilitaire natpmpc renvoie votre adresse IP publique.

 curl checkip.dyndns.org 

Si vous avez besoin de