Determinare il proprio IP pubblico da riga di comando
Quasi sempre le nostre macchine si trovano dietro un router o un firewall che maschera gli indirizzi privati e permette di uscire sulla Internet pubblica attraverso un meccanismo di Network Address Translation (NAT), e a volte capita di voler sapere qual è il nostro indirizzo IP nella rete pubblica. Ci sono diversi modi per determinare tale IP da riga di comando, vediamone alcuni.
Utilizzare un servizio web
Ci sono molti siti che se interrogati rispondono con una pagina che contiene il proprio indirizzo IP, alcuni di questi offrono anche una modalit solo testo facilmente interrogabile da riga di comando attraverso curl
o un comando per scaricare una pagina web.
Tra questi citiamo:
Come abbiamo detto la strada più facile è utilizzare curl
, ad esempio:
$ curl http://ifconfig.me
152.11.35.102
Può però capitare di non avere curl
installato, in questi casi è possibile ricorrere a programmi solitamente presenti in tutte le distribuzioni Linux come wget
o BSD come fetch
.
Esempio con wget
:
$ wget -q -O - http://ifconfig.me
152.11.35.102
Esempio con fetch
per FreeBSD:
# fetch -q -o - http://ipecho.net/plain
152.11.35.102
Utilizzare OpenDNS
Un metodo alternativo e probabilmente più rapido, è quello di interrogare il servizio di OpenDNS: interrogando il loro DNS per l'indirizzo myip.opendns.com si otterrà come risposta l'IP che ha fatto la query cioè il nostro IP pubblico.
Per interrogare il DNS si può usare il comando dig
che è solitamente disponibile sia su Linux che su Mac:
$ dig +short myip.opendns.com @resolver1.opendns.com
152.11.35.102
L'opzione +short fa in modo che dig
ritorni soltanto l'IP invece che l'intera stringa di risposta ottenuta dal DNS.
Sulle ultime versioni di FreeBSD il comando dig
è stato sostituito dal comando drill
il quale non ha una opzione per ottenere l'output compatto, pertanto occorre processarne l'output in modo da estrarre solo l'IP. Ad esempio così:
# drill myip.opendns.com @resolver1.opendns.com | grep '^myip\.opendns\.com' | awk '{ print $NF }'
152.11.35.102
Anche Google offre un servizio simile a quello di OpenDNS, ed è interrogabile con dig
come segue:
$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
"152.11.35.102"
Si noti però che in questo caso l'IP viene restituito tra virgolette. Anche in questo caso il servizio è utilizzabile su FreeBSD ma occorre selezionare dall'output solo le informazioni che vogliamo:
# drill TXT o-o.myaddr.l.google.com @ns1.google.com | grep '^o-o' | awk '{ print $NF }'
"152.11.35.102"
Per finire voglio solo ricordare che è possibile inserire l'IP pubblico in una variabile semplicemente, usando il costrutto $(). Ad esempio:
$ MYIP=$(dig +short myip.opendns.com @resolver1.opendns.com)
$ echo $MYIP
152.11.35.102