web-dev-qa-db-fra.com

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

Puis-je obtenir mon adresse IP publique (WAN) sur la ligne de commande? Je suis derrière un routeur (réseau local), avec une adresse IP dynamique attribuée par mon FAI.

J'ai déjà vu des solutions utilisant un service Web externe (tel que ifconfig.me), mais je veux savoir si je peux le faire sans service externe.

37
user61954

Si curl est installé sur votre système (la plupart le font), vous pouvez utiliser

curl ifconfig.me
12
Rory

Lorsque vous êtes derrière un routeur NAT avec UPNP, vous pouvez utiliser miniupnpc pour détecter une 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 comme:

#!/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
9
daeme

Très probablement, le routeur doit fournir un moyen d'obtenir l'IP externe si aucun service externe ne doit 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 sur Unix SE suggère d'utiliser DNS à la place.

Par exemple, en utilisant Dig avec OpenDNS comme résolveur:

Dig +short myip.opendns.com @resolver1.opendns.com
5
Percival Ulysses

Récupérez les informations de votre routeur via ssh ou curl.

J'utilise curl pour demander à dyndns mon adresse IP publique, mais une telle commande ne semble pas applicable pour vous non?

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

4
rhasti

Malheureusement, il n’existe aucun moyen de détecter des mécanismes tels que NAT qui n’impliquent pas de contacter un service distant. NAT est par nature complètement transparent pour l'utilisateur, à part les services interrompus, et il n'y a pas de protocole standard pour la découverte NAT.

Mais en ce qui concerne les services externes, je dois suggérer celui rapide et simple que j'ai écrit, ident.me, que vous pouvez utiliser à la fois 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/

2
Pierre Carrier

Si votre routeur prend en charge NAT PMP (protocole de mappage de port), vous pourrez peut-être récupérer votre adresse IP publique à l'aide de natpmp.

Il existe une interface de ligne de commande pour la bibliothèque linux natpmp appelée natpmpc. Sur ubuntu, c'est dans le paquetage natpmp-utils . Mon routeur ne semble pas prendre en charge natpmp. Par conséquent, je ne suis pas certain que l'utilitaire natpmpc renverra votre adresse IP publique.

1
Johnny

La commande linux que vous recherchez est ifconfig en supposant que vous êtes directement connecté à Internet.

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

Vous voudrez peut-être aussi discuter de cette question avec l’administrateur de votre système de voisinage convivial.

0
mdpc