Comando per determinare il mio IP pubblico?

520

Se controllo con google , posso vedere il mio IP pubblico. C'è qualcosa sulla riga di comando di Ubuntu che mi darà la stessa risposta?

    
posta kfmfe04 16.01.2012 - 12:50

22 risposte

735

Se non sei dietro un router, puoi scoprirlo utilizzando ifconfig .

Se sei dietro un router, il tuo computer non sarà a conoscenza dell'indirizzo IP pubblico mentre il router esegue una traduzione degli indirizzi di rete. Potresti chiedere ad alcuni siti web quale sia il tuo indirizzo IP pubblico che usa curl o wget ed estrarre da esso le informazioni necessarie:

curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

o più breve

curl ipinfo.io/ip
    
risposta data Michael K 16.01.2012 - 12:56
361

Per trovare l'ip esterno, puoi utilizzare servizi esterni basati sul web o utilizzare metodi basati sul sistema. Più facile è usare il servizio esterno, anche le soluzioni basate su ifconfig funzioneranno nel tuo sistema solo se non sei indietro di un NAT . i due metodi sono stati discussi di seguito in dettaglio.

Ricerca di IP esterno mediante servizi esterni

Il modo più semplice è utilizzare un servizio esterno tramite un browser a riga di comando o uno strumento di download. Poiché wget è disponibile di default in Ubuntu, possiamo usarlo.
Per trovare il tuo IP, usa-

$ wget -qO- http://ipecho.net/plain ; echo

Per gentile concessione :

Potresti anche utilizzare lynx (browser) o curl al posto di wget con piccole variazioni al comando precedente, per trovare il tuo ip esterno.

Usando curl per trovare l'ip:

$ curl ipecho.net/plain

Per un output formattato migliore, usa:

$ curl ipecho.net/plain ; echo

Un metodo più veloce (probabilmente il più veloce) che utilizza dig con OpenDNS come resolver:

  

Le altre risposte qui passano tutte su HTTP a un server remoto. Alcuni   richiedono l'analisi dell'output o dipendono dall'intestazione User-Agent   per fare in modo che il server risponda in testo normale. Cambiano anche abbastanza   frequentemente (andare giù, cambiare nome, pubblicare annunci, potrebbe cambiare   formato di output ecc.).

     
  1. Il protocollo di risposta DNS è standardizzato (il formato rimarrà compatibile).
  2.   
  3. Storicamente i servizi DNS (OpenDNS, Google Public DNS, ..) tendono a sopravvivere molto più a lungo e sono più stabili, scalabili e generalmente guardati   dopo di qualsiasi altro servizio HTTP whatismyip.com è caldo oggi.
  4.   
  5. (per quei fanatici che hanno a cuore la micro-ottimizzazione), questo metodo dovrebbe essere intrinsecamente più veloce (si tratti solo di pochi micro secondi).
  6.   

Uso dello scavare con OpenDNS come risolutore:

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

111.222.333.444

Copia da: link

Ricerca di IP esterni senza fare affidamento su servizi esterni

  • Se conosci il nome dell'interfaccia di rete

Digitare quanto segue nel proprio terminale:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print }' | awk '{print }'

In quanto sopra, sostituisci <interface_name> con il nome dell'interfaccia attuale, ad esempio eth0 , eth1 , pp0 , ecc ...

Esempio di utilizzo:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print }' | awk '{print }'
111.222.333.444
  • Se non conosci il nome dell'interfaccia di rete

Digita quanto segue nel tuo terminale (questo ottiene il nome e l'indirizzo IP di ogni interfaccia di rete nel tuo sistema):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if (  == "inet" ) { print  } else if (  == "Link" ) { printf "%s:" , } }' |awk -F: '{ print  ": "  }'

Esempio di utilizzo:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if (  == "inet" ) { print  } else if (  == "Link" ) { printf "%s:" , } }' |awk -F: '{ print  ": "  }'
lo: 127.0.0.1
ppp0: 111.222.333.444

N.B: le uscite sono indicative e non reali.

Cortesia: link

UPDATE

  1. LANG=c è stato aggiunto agli usi basati su ifconfig , in modo che fornisca sempre l'output in inglese, indipendentemente dalle impostazioni locali.
risposta data saji89 01.06.2012 - 14:10
102

Il mio preferito è sempre stato:

curl ifconfig.me

semplice, facile da digitare.

Dovrai prima installare arricciatura;)

Se ifconfig.me non funziona, prova icanhazip.com eo ipecho.net

curl icanhazip.com

o

curl ipecho.net
    
risposta data Panther 01.06.2012 - 14:41
54

icanhazip.com è il mio preferito.

curl icanhazip.com

È possibile richiedere esplicitamente IPv4:

curl ipv4.icanhazip.com

Se non hai curl puoi usare wget invece:

wget -qO- icanhazip.com
    
risposta data yprez 01.06.2012 - 19:23
43

Ho trovato tutto fastidioso e lento, quindi ho scritto il mio. È semplice e veloce.

La sua API è su link

Esempi:

curl ident.me
curl v4.ident.me
curl v6.ident.me
    
risposta data Pierre Carrier 03.01.2013 - 16:49
36

Potresti utilizzare una richiesta DNS invece della richiesta HTTP per scoprire il tuo IP pubblico:

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

Utilizza resolver1.opendns.com dns server per risolvere il magico myip.opendns.com hostname in tuo indirizzo IP.

    
risposta data jfs 27.02.2014 - 16:07
17

Quello che sto usando è:

wget -O - -q icanhazip.com

Sì, puoi avere ip: -)

    
risposta data jflaflamme 16.01.2012 - 15:20
15

Amazon AWS

curl http://checkip.amazonaws.com

Output di esempio:

123.123.123.123

Mi piace perché:

  • restituisce solo l'IP in chiaro, nient'altro
  • proviene da un noto fornitore che è improbabile che possa andare offline in qualsiasi momento
11

Inserisci esattamente questo, premi Invio dove indicato:

telnet ipecho.net 80 Invio
GET /plain HTTP/1.1 Invio
HOST: ipecho.net Invio
BROWSER: web-kit Invio
Invio

Invia manualmente una richiesta HTTP, che restituirà il tuo IP nella parte inferiore di HTTP/1.1 200 OK reply

Esempio di output:

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0
    
risposta data Liam 02.07.2013 - 08:38
8

Un altro veloce (potrebbe essere il più veloce, relativamente)

curl ipecho.net/plain
    
risposta data Mohnish 31.12.2013 - 21:49
7

Per questo è stato inventato STUN . Come client è possibile inviare una richiesta a un server STUN disponibile pubblicamente e restituire l'indirizzo IP che vede. Una sorta di livello basso di whatismyip.com in quanto non utilizza HTTP e nessun server DNS elegantemente realizzato, ma il protocollo STUN incredibilmente veloce.

Uso di stunclient

Se hai installato stunclient ( apt-get install stuntman-client su debian / ubuntu) puoi semplicemente fare:

$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

dove A.B.C.D è l'indirizzo IP della tua macchina sulla rete locale e W.X.Y.Z è il server di indirizzi IP come i siti web che vedi dall'esterno (e quello che stai cercando). Usando sed puoi ridurre l'output sopra solo a un indirizzo IP:

stunclient stun.services.mozilla.com |
    sed -n -e "s/^Mapped address: \(.*\):.*$//p"

Tuttavia, la tua domanda era come trovarla usando la riga di comando, che potrebbe escludere l'utilizzo di un client STUN. Quindi mi chiedo ...

Uso di bash

Una richiesta STUN può essere realizzata a mano, inviata a un server STUN esterno usando netcat ed essere post-elaborata usando dd , hexdump e sed in questo modo:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
    nc -u -w 2 stun.services.mozilla.com 3478 |
    dd bs=1 count=4 skip=28 2>/dev/null |
    hexdump -e '1/1 "%u."' |
    sed 's/\.$/\n/'

L'eco definisce una richiesta STUN binario (0x0001 indica Richiesta di binding) con lunghezza 8 (0x0008) con cookie 0xc00cee e alcune cose incollate da wireshark. Solo i quattro byte che rappresentano l'IP esterno sono presi dalla risposta, puliti e stampati.

Funzionante, ma non consigliato per l'uso in produzione: -)

P.S. Sono disponibili molti server STUN poiché si tratta di una tecnologia di base per SIP e WebRTC. Usarne uno da Mozilla dovrebbe essere sicuro per la privacy, ma potresti anche usarne un altro: elenco dei server STUN

    
risposta data Victor Klos 09.10.2015 - 19:21
6

Ho un servizio stupido per questo da telnet. Qualcosa del genere:

telnet myip.gelma.net

Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx

Sentiti libero di usarlo.

    
risposta data Gelma 13.03.2014 - 13:37
4

Puoi leggere una pagina web usando solo bash, senza curl , wget :

$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
  echo 'GET /' >&3 &&                   # send http 0.9 request
  read -u 3 && echo $REPLY &&           # read response
  exec 3>&-                             # close fd
    
risposta data jfs 18.09.2014 - 12:47
2

Utilizza cURL con ipogre.com (sono supportati IPv4 e IPv6).

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

link

    
risposta data Jacob 31.12.2013 - 06:07
2

Per quelli di noi con accesso di accesso ai nostri router, utilizzando uno script per chiedere al router qual è il suo indirizzo IP WAN è il modo più efficiente per determinare l'indirizzo IP esterno. Ad esempio il seguente script python stampa l'IP esterno per il mio router Medialink MWN-WAPR300N:

import urllib, urllib2, cookielib
import re
from subprocess import check_output as co

cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)

def get(url, values=None):
  data = None
  if values: data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  rsp = urllib2.urlopen(req)
  return rsp.read()

router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router

get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")

for line in page.split("\n"):
  if line.startswith("wanIP = "):
    print line.split('"')[1]
    exit(1)

Si noti che questo non è molto sicuro (come nel caso delle credenziali in chiaro e accesso alla maggior parte dei router), e non è certamente portatile (deve essere cambiato per ogni router). È comunque una soluzione molto veloce e perfettamente ragionevole su una rete domestica fisicamente sicura.

Per personalizzare lo script per un altro router, ti consiglio di utilizzare l'addon tamperata in firefox per determinare quali richieste HTTP fare.

    
risposta data KarlC 27.03.2014 - 04:08
2

Questi otterranno gli IP locali:

ifconfig

o per risultati più brevi:

ifconfig | grep inet

anche

ip addr show

e probabilmente:

hostname -I

Questo dovrebbe ottenere l'IP esterno

wget http://smart-ip.net/myip -O - -q ; echo

N.B. Se non ti dispiace installare curl , anche questo:

curl http://smart-ip.net/myip
    
risposta data Wilf 27.06.2014 - 18:08
1

Se hai installato lynx in Ubuntu type

lynx bot.whatismyipaddress.com
    
risposta data Binny 09.01.2013 - 13:35
1

Molti router domestici possono essere interrogati da UPnP:

curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s

Quindi, grep l'indirizzo IP dalla risposta.

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
    
risposta data jms 18.09.2016 - 22:45
0

Se utilizzi DD-WRT , questo funziona per me:

curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'

o

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'
  • Dove 192.168.1.1 è l'indirizzo IP LAN Gateway / Router del router DD-WRT.

  • Il componente -s significa silenzioso (cioè non mostrare le informazioni sullo stato di arricciatura).

  • Oh, dovrei dire che uso quanto sopra con "DD-WRT v24-sp2 (01/04/15) std" .
risposta data CMP 14.04.2017 - 18:14
-2

Basta emettere un traceroute per qualsiasi sito Web o servizio ..

sudo traceroute -I google.com

La linea 2 sembra sempre essere il mio indirizzo IP pubblico dopo che ha superato il mio router gateway.

[email protected] ~ $ sudo traceroute -I google.com
traceroute to google.com (173.194.46.104), 30 hops max, 60 byte packets
 1  25.0.8.1 (25.0.8.1)  230.739 ms  231.416 ms  237.819 ms
 2  199.21.149.1 (199.21.149.1)  249.136 ms  250.754 ms  253.994 ms**

Quindi, crea un comando bash.

sudo traceroute -I google.com | awk -F '[ ]' '{ if (  ="2" ) { print  } }'

E l'output ...

(199.21.149.1)

Non penso che fare affidamento su script PHP e il tipo sia una buona pratica.

    
risposta data woahguy 24.07.2015 - 18:34
-2

Un comando senza dipendenze eccetto 8.8.8.8 essendo un DNS di Google:

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
    
risposta data Rolf 19.08.2015 - 09:57
-2

usa ip !

ip addr show

quindi cerca l'adattatore pertinente (non lo , e di solito eth0 ), e individua l'indirizzo ip vicino a inet .

    
risposta data Eliran Malka 16.08.2016 - 01:06

Leggi altre domande sui tag