Determinare il proprio IP pubblico da riga di comando

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

Currently there are no comments, so be the first!