Posso trovare il mio indirizzo IP usando ifconfig o il comando hostname -i.
Ma come posso trovare il mio IP pubblico?
(Ho un IP pubblico statico ma voglio scoprirlo usando il comando unix)
Posso trovare il mio indirizzo IP usando ifconfig o il comando hostname -i.
Ma come posso trovare il mio IP pubblico?
(Ho un IP pubblico statico ma voglio scoprirlo usando il comando unix)
Risposte:
curl ifconfig.me
curl ifconfig.me/ip
(solo per l'IP)
curl ifconfig.me/all
(per maggiori informazioni, richiede tempo)
Per ulteriori comandi, visitare: http://ifconfig.me/#cli_wrap
curl http://checkip.amazonaws.com/
È possibile richiedere myip.opendns.com
. da OpenDNS. dig @208.67.222.220 myip.opendns.com
dig @resolver1.opendns.com myip.opendns.com
. O su Windows: nslookup myip.opendns.com resolver1.opendns.com
.
dig @208.67.222.220 myip.opendns.com +short
per ottenere direttamente l'ip senza dover passare attraverso l'intera risposta.
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
Si noti che quanto sopra funziona solo per IPv4 al momento (nessuno di questi resolver sembra avere IPv6 attualmente, ma se si omette -4
ed esplicito -t a
, si rischia che si guastasse in futuro (ad eccezione di Google txt
, che potrebbe effettivamente funzionare per IPv6 un giorno, se abilitato correttamente da Google)).
Nota che myip.opendns.com
è risolvibile solo attraverso resolver1.opendns.com
, e non con auth1.opendns.com
- quindi, sembrano fare del dirottamento DNS e man-in-the-middle del proprio nome di dominio! Pertanto, non è possibile utilizzarlo per trovare l'IP di un risolutore casuale, poiché resolver1.opendns.com
non è autorevole per myip.opendns.com
.
Si noti che o-o.myaddr.l.google.com
sembra l'approccio più flessibile e a prova di futuro; è anche utile per verificare se il risolutore DNS supporta l'estensione sperimentale EDNS0 per la sottorete client (per la quale pochissimi resolver hanno il supporto):
% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
dig +short AAAA myip.opendns.com @2620:0:ccc::2
.
-4
o -6
se è necessaria una versione IP specifica.
Una risposta molto semplice se si dispone di accesso a Internet è:
curl icanhazip.com
Ricorda, fidarsi delle fonti di terze parti per il tuo IP potrebbe essere problematico, specialmente se ciò che fai con quei dati ha un significato speciale.
Un modo più affidabile è scegliere un server DNS noto e affidabile (idealmente con DNSSEC) e interrogare il nome host della casella con esso, a condizione che il server DNS contenga tali voci;
dig @trustworthysource.com +short `hostname`
Ho scritto un servizio web semplice e veloce per questo.
curl ident.me
Puoi chiedere il tuo IPv4:
curl v4.ident.me
O IPv6:
curl v6.ident.me
E l'API è documentata su http://api.ident.me/
Un modo: http://www.whatismyip.com/
Se
quindi puoi semplicemente analizzare l'output di ifconfig per gli indirizzi IP delle interfacce (la parte "inet addr:") per ottenere l'elenco degli indirizzi IP di tutte le tue interfacce. L'unico indirizzo IP che non rientra nell'intervallo privato (vedi http://it.wikipedia.org/wiki/IP_address#IPv4_private_addresses ) è il tuo indirizzo IP pubblico.
Lo stesso elenco può essere ottenuto anche tramite
ip addr show
che potrebbe essere più facile da analizzare.
Se non si dispone di una connessione Internet diretta (NAT ecc.), Non è possibile trovare l'indirizzo IP pubblico senza un aiuto esterno (poiché il computer non lo conosce). Quindi dovrai farlo come nelle altre risposte.
Ho adottato un approccio leggermente diverso usando il protocollo STUN progettato per NAT Traversal. Se usi Ubuntu puoi semplicemente installare il pacchetto "stun" digitando:
sudo apt-get install stun
Il pacchetto installa un server STUN che probabilmente non ti servirà, ma include anche un client di test STUN che ho usato per risolvere questo problema. Ora puoi recuperare il tuo IP pubblico con un comando (non così semplice):
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
Ora, quello che fa è: stun contatta il server STUN pubblico "stunserver.org" e ottiene una risposta con il tuo IP pubblico, il resto del comando è solo per filtrare l'IP dall'output.
Un modo è, è possibile effettuare una richiesta alla pagina all'indirizzo
http://www.biranchi.com/ip.php
restituisce l'indirizzo IP del tuo sistema
text/html
va bene per quello che restituisce quella pseudo-API - non è certamente XML o JSON. text/plain
forse, ma è interamente utilizzabile come text/html
.
wget -q -O - http://wgetip.com/
Google ora visualizza il tuo indirizzo IP pubblico: http://www.google.com/search?q=ip
User-Agent
stringa fornita alla pagina. Con Firefox, funziona; ma SeaMonkey con la stringa "Firefox" disabilitata (tramite "general.useragent.compatMode.firefox" impostato su false), improvvisamente no. Non ho assolutamente idea del perché Google abiliti esplicitamente cose come questa solo per Firefox invece di qualsiasi Gecko, dal momento che ci sono molti altri browser desktop basati su Gecko che sono ugualmente compatibili, incluso SeaMonkey.
Okay ... So che questo è MODO dopo il fatto e probabilmente non vale nemmeno la pena pubblicare, ma ecco la mia soluzione di lavoro.
#!/bin/sh
IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP
Bello e semplice.
hostname -I
(maiuscolo 'i').
Il modo più semplice è usare http://ifconfig.me/ , come suggerito.
In questa pagina, saprai quale comando utilizzare per quali informazioni desideri recuperare.
Per IP:
arricciare ifconfig.meo
arricciare ifconfig.me/ip
Per nome host pubblico:
arricciare ifconfig.me/host
Per tutte le informazioni in un file XML:
arricciare ifconfig.me/all.xml
ecc ... basta dare un'occhiata a http://ifconfig.me
Lo sto facendo molto e da molti dispositivi, quindi ho creato i miei due servizi su un server:
file php alla radice di un server web:
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Utilizzo su una shell:
$ curl -4 mydomain.com
79.22.192.12
lavorando anche con ipv6:
$ curl mydomain.com
2a01:e34:ee7d:180::3
Con netcat:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Su un router Cisco:
router#more http://myserver.com/index.php
79.22.192.12
hack rapido con un server telnet personalizzato: xinetd spawning / usr / bin / env:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
e poi telnet ad esso:
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
funziona allo stesso modo con un router:
router#telnet myserver.com
79.22.192.12
In questo modo puoi farlo funzionare sulla tua rete interna, se qualche comunicazione nat o proxy è coinvolta nella comunicazione e ti piacerebbe sapere da quale IP appari.
Non richiede alcun servizio di terze parti.
Per evitare di fare affidamento su fonti esterne, uso prevede, telnet nel mio router e ottenere l'indirizzo IP della sua interfaccia pubblica. Ecco un esempio prevede script:
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
Quindi eseguo lo script sopra in questo modo per ottenere l'ip pubblico:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
Naturalmente, questo si basa sul presupposto che io abbia accesso come amministratore al router, ed è un router basato su Linux, con il comando ifconfig disponibile.
Duplica di molte altre domande (da qui il mio voto -1).
Una semplice soluzione di script di shell è disponibile qui:
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
Funziona su Linux, FreeBSD, SunOS e Apple Darwin (con una piccola modifica).
Se quello che vuoi è trovare l'indirizzo IP esterno sul tuo router, chiedi al router stesso il suo indirizzo debole, o chiedi a qualcuno esterno di ottenerlo per te.
per un modo manuale è possibile navigare tra i siti sopra indicati che restituiranno l'ip della richiesta in entrata.
Per un modo automatizzato, puoi provare:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
che ti porterà alla riga che contiene l'indirizzo IP sulla risposta http, quindi analizzalo con sed, awk, ecc
puoi usare solo la shell per controllare il tuo ip esterno, anche usando provider esterni
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
produzione
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *' -M1
Lo faccio. Mi dà solo l'IP senza alcun coinvolgimento di terze parti.
mostra indirizzo IP | grep eth0 | grep inet | tr -s "" | cut -f3 -d "" | cut -f1 -d "/"
Ecco un'altra alternativa che dipende dagli host la cui attività aziendale risolve la gestione dell'IP dinamico piuttosto che i siti di "servizio pubblico" che potrebbero andare via o cambiare formato.
1) Registra il tuo server su uno dei tanti servizi DNS dinamici gratuiti (es. No-ip.com). Questo ti darà una voce DNS come xxx.no-ip.org.
2) Installa lo strumento di aggiornamento dinamico del servizio (riporta le modifiche IP al servizio).
Per ottenere l'indirizzo IP in uno script, basta fare:
$external_ip = `dig +short xxx.no-ip.org`
Ottimo per l'uso in cron job per verificare se l'IP dinamico è stato modificato e alcune voci di configurazione devono essere modificate.
Su OS X ecco due semplici soluzioni per ottenere sia l'IP privato che quello pubblico (con codice bonus se usi LaunchBar).
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"