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.
Si curl est installé sur votre système (la plupart le font), vous pouvez utiliser
curl ifconfig.me
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
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
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,'
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/
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.
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.