Cos’è un’API per l’IP pubblico
Un’API per l’IP pubblico è un indirizzo web che risponde a una richiesta GET con l’IP da cui la richiesta è arrivata, in testo semplice o in JSON. Serve perché un computer dietro un router conosce solo il proprio IP privato: per sapere con quale indirizzo esce su Internet deve chiederlo a un server esterno.
Le risposte strutturate sono in JSON (RFC 8259). Tutte le chiamate usano GET, un metodo “sicuro” secondo la RFC 9110: legge dati senza modificare nulla sul server.
Come usare l’API IP da terminale
- Scrivi
curl mio-indirizzo-ip.it/ipper ottenere il tuo IP pubblico in una riga di testo. - Usa
curl mio-indirizzo-ip.it/jsonper avere anche ASN, provider, rete CIDR e posizione approssimativa in JSON. - Per analizzare un altro indirizzo aggiungilo in fondo:
curl mio-indirizzo-ip.it/json/8.8.8.8. - Negli script che usano l’IPv4 aggiungi
-4a curl. Il comando resterà corretto anche quando il servizio sarà raggiungibile in IPv6.
Gli endpoint disponibili
| Endpoint | Risposta | Limite |
|---|---|---|
/ip | Il tuo IP pubblico, testo semplice | 120/min |
/cidr | La rete annunciata che contiene il tuo IP, per esempio 203.0.113.0/24 | 120/min |
/asn | Numero e nome del sistema autonomo, per esempio AS64496 ESEMPIO-AS | 120/min |
/json | Tutti i dati del tuo IP in JSON | 120/min |
/json/<ip> | Tutti i dati di un IPv4 o IPv6 pubblico qualsiasi | 30/min |
Gli endpoint non hanno la barra finale. Il limite vale per singolo indirizzo IPv4 o per rete /64 IPv6. Gli header X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset dicono quante richieste restano. Oltre la soglia ricevi il codice 429 Too Many Requests (RFC 6585) con l’header Retry-After, che indica i secondi da attendere. Esistono anche soglie complessive per rete e per l’intero servizio, che proteggono le fonti dati.
I campi della risposta JSON
La risposta di /json è un oggetto con questi campi. L’esempio usa indirizzi e numeri riservati alla documentazione.
{
"ip": "203.0.113.25",
"version": 4,
"hostname": "host-25.example.net",
"asn": 64496,
"as_name": "ESEMPIO-AS",
"isp": "Esempio Telecomunicazioni",
"cidr": "203.0.113.0/24",
"country": "Italia",
"country_code": "IT",
"region": "Lazio",
"city": "Roma",
"timezone": "Europe/Rome",
"is_private": false
}| Campo | Significato |
|---|---|
ip, version | L’indirizzo e la versione del protocollo, 4 o 6 |
hostname | Il nome inverso (PTR) dell’indirizzo, null se manca |
asn, as_name | Il sistema autonomo che annuncia la rete, da RIPEstat |
isp | Il provider secondo il database di geolocalizzazione |
cidr | Il prefisso annunciato in BGP che contiene l’IP |
country, country_code, region, city, timezone | Posizione stimata: affidabile per il paese, molto meno per la città |
is_private | true per indirizzi privati o riservati, che non hanno dati pubblici |
La risposta reale contiene anche source, con le fonti usate, e docs, il link a questa pagina. Un campo che una fonte non ha restituito vale null: il tuo codice deve prevederlo. Da curl il JSON arriva già indentato, dalle altre applicazioni in forma compatta.
Casi d’uso: DNS dinamico, monitoraggio, whitelist e log
L’API serve a qualsiasi script che deve conoscere un IP pubblico senza intervento manuale. I casi più comuni:
- DNS dinamico: uno script legge l’IP con
/ipe, se è cambiato, aggiorna il record A del dominio tramite l’API del tuo provider DNS. È l’alternativa fai da te a un servizio DDNS per una linea con IP dinamico. - Monitoraggio del cambio IP: un job pianificato confronta l’indirizzo con quello salvato e ti avvisa quando cambia, oppure registra ogni quanto il provider lo riassegna.
- Whitelist: prima di autorizzare un server su un firewall o su un pannello di hosting, ricavi l’IP di uscita esatto della macchina, che può essere diverso da quello del tuo PC.
- Analisi dei log: con
/json/<ip>arricchisci gli indirizzi sospetti con ASN e provider, per capire se un attacco arriva da un datacenter o da una rete domestica.
Un esempio minimo per Linux e macOS, da lanciare con cron:
NUOVO=$(curl -4 -s -m 10 mio-indirizzo-ip.it/ip) || exit 1
VECCHIO=$(cat ~/.ip_pubblico 2>/dev/null)
[ "$NUOVO" != "$VECCHIO" ] && echo "$NUOVO" > ~/.ip_pubblico && echo "IP cambiato: $NUOVO" Buone pratiche per interrogare l’API
L’API resta gratuita finché il carico è ragionevole:
- Non interrogarla più di una volta ogni 5 minuti per controllare il tuo IP. Un IP dinamico cambia di rado, e un controllo al minuto non ti avvisa molto prima.
- Se il record da aggiornare è un A, usa sempre
curl -4: su una linea dual stack curl potrebbe collegarsi in IPv6. - Salva in cache i dati di
/json/<ip>: ASN e rete di un indirizzo cambiano raramente da un giorno all’altro. - Imposta un timeout, per esempio
-m 10, e gestisci gli errori: con un 429 aspetta i secondi indicati daRetry-Afterprima di riprovare. - Controlla che la risposta sia un indirizzo valido prima di usarla in un record DNS o in una regola di firewall.
Da una pagina web puoi chiamare l’API con fetch(): le risposte includono l’header CORS Access-Control-Allow-Origin: *, quindi il browser le accetta da qualsiasi sito. In Windows PowerShell usa curl.exe oppure Invoke-RestMethod https://www.mio-indirizzo-ip.it/json, che converte già il JSON in un oggetto. Altri comandi sono nella guida IP da cmd, PowerShell e terminale.
Differenze con gli altri servizi che mostrano l’IP
Esistono molti servizi, quasi tutti in inglese, che restituiscono l’IP pubblico a uno script. Per il solo indirizzo si equivalgono: ogni server vede lo stesso IP da cui parte la richiesta. Cambiano i dati aggiuntivi e le condizioni d’uso, da verificare sul loro sito prima di usarli in produzione.
Il campo cidr è il prefisso annunciato in BGP letto da RIPEstat, cioè la rete che vedono i router, non un intervallo stimato. Documentazione e messaggi di errore sono in italiano. Non serve un account, e le richieste non vengono collegate a un profilo. Per esplorare la rete di un indirizzo dal browser c’è lo strumento CIDR di un IP.
Domande frequenti
L’API IP è davvero gratuita?
Sì, senza chiave né registrazione. Gli unici vincoli sono i limiti di frequenza: 120 richieste al minuto per il tuo IP e 30 al minuto per /json/<ip>. Per uno script che controlla l’IP ogni pochi minuti sono molto più del necessario.
Come ottengo solo l’indirizzo IPv4 anche se ho IPv6?
Usa curl -4 mio-indirizzo-ip.it/ip: curl si collega solo in IPv4 e il server vede il tuo indirizzo IPv4. Oggi il dominio non ha ancora un indirizzo IPv6, quindi l’API risponde comunque in IPv4 e una richiesta con -6 non va a buon fine. Con -4 negli script continuerai a ricevere l’IPv4 anche quando il servizio sarà raggiungibile in IPv6.
Cosa succede se supero il limite di richieste?
Il server risponde con il codice HTTP 429 Too Many Requests e un messaggio JSON. L’header Retry-After indica quanti secondi aspettare: il limite si azzera ogni minuto.
Quanto è precisa la posizione restituita dall’API?
È una stima di un database di geolocalizzazione di terzi: affidabile per il paese, spesso per la regione, molto meno per la città. ASN e cidr sono invece dati di routing pubblici letti da RIPEstat. Le cause degli errori di posizione sono nella guida posizione dell’IP sbagliata.
Posso usare l’API da JavaScript nel browser?
Sì: le risposte hanno l’header Access-Control-Allow-Origin: *, quindi fetch('https://www.mio-indirizzo-ip.it/json') funziona da qualsiasi pagina. Ricorda che ogni visitatore interroga l’API con il proprio IP e consuma il proprio limite.
Cosa restituisce l’API per un indirizzo privato?
Per un indirizzo privato o riservato, come 192.168.1.10, /json/<ip> risponde con un errore 400 e "is_private": true, perché quegli indirizzi esistono in milioni di reti locali e non hanno provider né posizione su Internet.
Fonti e riferimenti
- RFC 8259 – The JavaScript Object Notation (JSON) Data Interchange Format (IETF)
- RFC 9110 – HTTP Semantics (IETF)
- RFC 6585 – Additional HTTP Status Codes, 429 Too Many Requests (IETF)
- Fetch Standard, CORS protocol (WHATWG)
- RIPEstat – dati sulle risorse Internet (RIPE NCC)
- RFC 5737 e RFC 5398 – indirizzi IPv4 e ASN riservati alla documentazione (IETF)
Pagina aggiornata il