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


37

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.


Pouvez-vous s'il vous plaît ajouter plus de détails quant à la configuration de votre réseau? Êtes - vous derrière un routeur / commutateur qui FONCTIONNE avoir accès à Internet et que vous essayez de vérifier l'adresse IP WAN que le routeur / commutateur devient de votre fournisseur d' accès Internet?
slm

@slm Je suis derrière un routeur et je ne trouve pas l'adresse IP assignée au routeur par le FAI
user61954

Voir la 3ème façon que je viens d'ajouter à ma réponse. Vous allez vouloir voir s'il existe un moyen d'obtenir votre IP WAN de votre routeur. Quelle est la marque / le modèle du routeur?
slm

Vous devez interroger un type de service externe. De manière générale, un ordinateur n'a aucune idée de l'adresse IP sur laquelle les autres ordinateurs verront ses connexions provenir.
David Schwartz

Réponses:


27

En supposant que votre système dispose de 2 périphériques Ethernet, eth0et eth1et eth0est connecté à votre réseau local, par exemple IP 192.168.1.X et votre eth1appareil est connecté à votre fournisseur d' accès Internet (WAN) , vous allez vouloir utiliser ce qui suit ifconfigcommande pour obtenir votre IP le côté WAN.

REMARQUE: les deux premières manières supposent que vous les exécutez sur un ordinateur doté de deux périphériques Ethernet et que l'un d'entre eux est connecté à votre fournisseur de services Internet (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).

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 -e s/addr://
54.234.1.33

Vous pouvez également utiliser la ipcommande.

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

2ème voie

Si vous avez besoin de le savoir à partir d'un système qui se trouve uniquement sur le réseau local, vous pouvez configurer une clé ssh sans phrase secrète et l'ajouter à un compte sur votre ordinateur de réseau local afin qu'il puisse accéder au système à distance avec le même accès au réseau étendu.

                                                            +----------------+
  +--------+    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 -e s/addr://"
54.234.1.33

3ème voie

Si vous ne parvenez pas à vous connecter à la boîte avec un accès WAN et que vous utilisez un routeur / commutateur domestique tel qu'une boîte Linksys ou Netgear. Vous pourrez peut-être obtenir l'adresse IP de cet appareil via une page d'état HTTP. Je l'ai déjà fait par le passé, quelque chose de similaire à ce qui est décrit dans cet article 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 de votre routeur / commutateur, qu'il s'agisse d'une marque Linksys, Netgear, etc. Chacun aura sa propre page avec l’adresse IP du réseau étendu.

4ème voie

Envoi d'une requête à un site Internet externe qui rendra compte de votre adresse IP WAN.

NOTE: Je sais que la question initiale indiquait qu'ils cherchaient une alternative à cette approche, mais je la mets ici pour 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 - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2nd server
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
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 votre adresse IP externe à partir de la ligne de commande


J'ai quelque chose comme mon système se connecte à un routeur et il est connecté à l'intrnet
user61954

5
Puisqu'il a déclaré qu'il n'est pas directement connecté, aucun des eth*périphériques n'aura l'adresse IP du réseau étendu. À moins que son routeur ne prenne en charge ssh, il a accès, et ifconfig, cela ne fonctionnera pas. Pas de vote négatif, mais juste pour que quiconque essayant de faire cela soit conscient.
AaronLS

Relisez sa question. Il dit qu'il a un accès LAN, mais pas un accès Internet, élément n ° 1. Point # 2 dit qu'il obtient un je IP dynamique de son fournisseur d' accès Internet, en supposant qu'il est soit a un autre système b / w son réseau local uniquement connexion et Internet OU il a un routeur domestique / commutateur b / w lui et l'Internet.
slm

Downvoters, essayez de laisser un commentaire, cette réponse est de loin la plus complète et pourtant les gens ne votent pas. @ user61954 a même déclaré dans ses commentaires qu'il était derrière un routeur, alors l'une des méthodes que j'ai décrites fonctionnera.
slm

J'ai voté. Mais la première et la deuxième façon ne fonctionnent pas, elle ne retourne que l'adresse localip. Merci!
Jared Burrows

12

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

curl ifconfig.me

Hey, merci, cette aide à moi, juste une question, Quel est le "ifconfig.me" Je connais la fonction ifconfig, mais je ne suis pas habituellement avec cela. S'il vous plaît pouvez-vous me donner un lien pour lire à ce sujet ou l'expliquer. --Update-- n'a pas lu la question. ups
Aby W

ifconfig.me est un site web qui vous donne votre adresse IP.
Rory

ifconfig.me ne supporte pas https, il pourrait donc être usurpé. Ce n'est pas une bonne idée de l'utiliser pour vérifier si votre VPN est actif.
Dan Dascalescu

9

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

5

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 chez Unix SE suggère d'utiliser DNS à la place.

Par exemple, digavec OpenDNS comme résolveur:

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

+1, mais à la fin de la journée, c'est la même chose que d'utiliser, curl ident.mecar nous nous basons sur un service spécifique ( myip.opendns,comle serveur DNS est
réservé à cet effet

4

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, n'est-ce pas?

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


2

Malheureusement, il n’existe aucun moyen de détecter des mécanismes tels que NAT qui n’impliquent pas le contact avec un service distant. La NAT est par nature complètement transparente 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 qui est simple et rapide 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.meet l’API complète est documentée sur http://api.ident.me/


1

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 paquet 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.


0

La commande linux que vous recherchez ifconfigsuppose 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 pouvez également discuter de cette question avec l’administrateur de votre système de voisinage convivial.


ifconfigest obsolète.
BatchyX

"commande traceroute, mais elle donne l'adresse IP locale du réseau local, 192.168.1.1". Donc je suppose qu'il y a un LAN. Par conséquent, il doit y avoir une sorte de routeur / passerelle / nat quelque part. Ensuite, ifconfig ne donnera pas d'adresse IP publique car la composition de l'op n'est pas directement connectée à Internet.

@BatchyX. Quel système d'exploitation utilisez-vous? Tous les systèmes sur lesquels je suis installé ont ifconfig. Fedora, CentOS, Ubuntu, etc.
slm

2
@batchx: Et où obtenez-vous cette information? Je ne suis pas d'accord avec vous sur celui-là.
Mdpc

1
@sim: Parce qu'une commande est présente ne veut pas dire qu'elle n'est pas obsolète. Il suffit de regarder la ifconfigdernière date de sortie. Regardez maintenant la ìproute2dernière version. Pour une source, voir lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
BatchyX

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.