Esistono delle librerie (sicuramente per perl, probabile anche per php ma non sono sicuro) che fanno quello che dici, ovvero trovano la città in base all'IP, ma come fa notare giustamente Neo non sono precise.
Il metodo che usano queste librerie si basa su "statistiche" fornite dagli utenti.
Alcuni siti che registrano dati quali città eccetera durante la registrazione, forniscono poi la coppia ip/città (e nazione) a queste società che poi compilano le tabelle.
Se per ipotesi tu fossi il primo e l'unico ad avere l'ip 123.221.231.109 e ti registri su uno di questi siti dicendo che sei del gabon, quell'ip risulterà del gabon.
Geo::IP o Geo::IP::PurePerl sono i moduli perl.
![]()