Come posso ottenere il mio indirizzo IP pubblico dalla riga di comando, se sono dietro un router?


37

Esiste un modo per ottenere il mio indirizzo IP pubblico (WAN) sulla riga di comando? Sono dietro un router (rete LAN), con un indirizzo IP dinamico assegnato dal mio ISP.

Ho visto soluzioni utilizzando un servizio Web esterno (come ifconfig.me), ma voglio sapere se posso farlo senza un servizio esterno.


Potete per favore aggiungere maggiori dettagli sulla configurazione della vostra rete? Sei dietro un router / switch che FUNZIONA hanno accesso a internet e si sta cercando di accertare l'indirizzo IP WAN che il router / switch è sempre dal vostro ISP?
slm

@slm Sono dietro un router e una formica per scoprire l'ip assegnato al router dall'ISP
user61954

Vedi il terzo modo che ho appena aggiunto alla mia risposta. Avrai voglia di vedere se c'è un modo per ottenere il tuo IP WAN dal tuo router. Che marca / modello è il router?
slm

Devi interrogare un qualche tipo di servizio esterno. In generale, un computer non ha idea di quale indirizzo IP verrà visto da altri computer.
David Schwartz,

Risposte:


27

Assumendo che il sistema dispone di 2 dispositivi ethernet, eth0ed eth1e eth0è collegato alla LAN, IP dire 192.168.1.X e il vostro eth1dispositivo è collegato al provider di servizi Internet (WAN) si sta andando a voler utilizzare il seguente ifconfigcomando per ottenere il vostro IP per il lato WAN.

NOTA: I primi 2 modi presuppongono che tu li stia eseguendo su un computer che ha 2 dispositivi Ethernet e che uno di essi sia collegato al tuo ISP (modem via cavo e / o modem DSL). In questo scenario il dispositivo Ethernet (eth1) verrà configurato con il tuo indirizzo IP su Internet (IP WAN).

1a via

                          +------------------------+
  +--------+    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

Puoi anche usare il ipcomando.

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

2a via

Se è necessario scoprirlo da un sistema che si trova solo sulla LAN, è possibile impostare una chiave ssh senza passphrase e aggiungerla a un account sul proprio computer LAN in modo che possa accedere in remoto al sistema con l'accesso WAN in questo modo.

                                                            +----------------+
  +--------+    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

3a via

Se non riesci ad accedere a SSH nella casella con accesso WAN e stai utilizzando un router / switch domestico come un box Linksys o Netgear. Potresti essere in grado di ottenere l'IP da quel dispositivo tramite una pagina di stato HTTP. L'ho fatto anche in passato, qualcosa di simile a ciò che è descritto in questo post sul 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

NOTA: questo approccio dipende fortemente dal router / switch che si possiede, che si tratti di un marchio Linksys, Netgear, ecc. Ognuno avrà la propria pagina unica con l'IP WAN su di esso.

4 ° modo

Invio di una query a un sito Internet esterno che riporterà il proprio indirizzo IP WAN.

NOTA: sono consapevole che la domanda originale menzionava che stavano cercando alternative a questo approccio, ma lo sto inserendo qui in modo che questa risposta copra tutte le basi.

                                                        +---------------+
  +-------------+   +--------+   +------+     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

Ulteriori informazioni sono disponibili qui: HOWTO: Controlla il tuo indirizzo IP esterno dalla riga di comando


Ho qualcosa come il mio sistema si connette a un router ed è collegato a Internet
user61954

5
Poiché ha dichiarato di non essere collegato direttamente, nessuno dei eth*dispositivi avrà l'IP WAN. A meno che il suo router non supporti ssh, abbia accesso e ifconfig, questo non funzionerà. Non effettuare il downvoting, ma solo chiunque cerchi di farlo è consapevole.
AaronLS il

Rileggi la sua domanda. Dice di avere accesso alla LAN, non solo accesso a Internet, articolo n. 1. L'articolo n. 2 dice che sta ricevendo un IP dinamico dal suo ISP, presumo che abbia un altro sistema in b / n la sua connessione solo LAN e Internet O abbia un router / switch di casa tra lui e Internet.
slm,

Downvoter, prova a lasciare un commento, questa risposta è di gran lunga la più completa e tuttavia le persone votano male. @ user61954 ha anche detto nei suoi commenti che è dietro un router, quindi uno dei metodi che ho descritto funzionerà.
slm

Ho votato. Ma il primo e il secondo modo non funzionano, restituisce solo l'indirizzo localip. Grazie!
Jared Burrows,

12

Se il tuo sistema ha il ricciolo installato (molti lo fanno), puoi usarlo

curl ifconfig.me

Ehi, grazie, questo aiuto per me, solo una domanda, che cos'è "ifconfig.me" Conosco la funzione ifconfig, ma di solito non ci sto. Per favore, puoi darmi un link per leggerlo o spiegarlo. --Update-- non ha letto la domanda. ups
Aby W,

ifconfig.me è un sito Web che ti fornisce il tuo IP.
Rory,

ifconfig.me non supporta https, quindi potrebbe essere falsificato. Non è una buona idea usarlo per verificare se la tua VPN è attiva.
Dan Dascalescu il

9

Quando si è dietro un router NAT con UPNP, è possibile utilizzare miniupnpc per rilevare l'indirizzo IP wan:

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

# get WAN IP address from UPNP router:
upnpc -s | grep ^ExternalIPAddress | cut -c21-

Potresti usarlo in uno script, ad esempio per cron come:

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

Molto probabilmente, il router deve fornire un modo per ottenere l'IP esterno se nessun servizio esterno deve o può essere utilizzato (come alcune altre risposte già indicate). Per i servizi esterni, nella maggior parte delle altre risposte, viene utilizzato un servizio Web. Questa risposta su Unix SE suggerisce invece di utilizzare DNS.

Ad esempio, usando digcon OpenDNS come resolver:

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

+1, ma alla fine del giorno è lo stesso che usare curl ident.meperché stiamo facendo affidamento su un servizio specifico (in un caso myip.opendns,comspeciale è il server DNS del
teatro

4

Recupera informazioni dal tuo router via ssh o curl.

Uso curl per chiedere a dyndns il mio IP pubblico ma un comando del genere non sembra adatto a te vero?

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


2

Sfortunatamente non è possibile rilevare meccanismi come NAT che non prevedono il contatto con un servizio remoto. NAT è per sua natura completamente trasparente per l'utente, oltre ai servizi non funzionanti, e non esiste un protocollo standard per la scoperta di NAT.

Ma per quanto riguarda i servizi esterni, devo suggerire quello veloce e semplice che ho scritto, ident.me, che puoi usare sia per IPv4 che per IPv6; per la sua forma più semplice che puoi usare curl ident.mee l'API completa è documentata su http://api.ident.me/


1

Se i supporti router NAT PMP (Port Mapping Protocol), si può essere in grado di recuperare il vostro IP pubblico utilizzando natpmp.

C'è un'interfaccia a riga di comando per la libreria natpmp di Linux chiamata natpmpc. Su Ubuntu, è nel pacchetto natpmp-utils . Il mio router non sembra supportare natpmp, quindi non sono sicuro che l'utilità natpmpc restituirà il tuo IP pubblico.


0

Il comando linux che stai cercando sta ifconfigassumendo che tu sia connesso direttamente a Internet.

In caso contrario e l'accesso tramite proxy o routing speciale, il modo più semplice (come indicano altri) è quello di accedere / accedere a un altro host e controllarlo da lì.

Inoltre, potresti discutere di questa domanda con il tuo amministratore di sistemi di vicinato amichevole.


ifconfigè deprecato.
BatchyX il

"comando traceroute, ma fornisce l'ip locale della lan, 192.168.1.1". Quindi immagino che ci sia una lan. Pertanto ci deve essere un qualche tipo di router / gateway / nat da qualche parte. Quindi ifconfig non fornirà l'indirizzo IP pubblico poiché la comp di op non è direttamente connessa a Internet.

@BatchyX. Quale sistema operativo stai eseguendo? Ogni sistema su cui sto eseguendo ha ifconfig. Fedora, CentOS, Ubuntu, ecc.
slm

2
@batchx: e da dove prendi queste informazioni? Non sono d'accordo con te su quello.
mdpc,

1
@sim: poiché un comando è presente non significa che non sia deprecato. Guarda l' ifconfigultima data di rilascio. Ora guarda l' ìproute2ultima versione. Per quanto riguarda una fonte, vedi lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
BatchyX il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.