ti serve un database ip2location o ip2country oppure apri con un socket geoplugin.net e esplodi il risultato, gestendo il timeout in caso qualcosa vada male.

per ip2country avevo un database e controllavo l'appartenenza di un ip al range del paese, per essere più specifici putroppo il database diventa molto pesante (sui 70 mb).

ora uso geoplugin e non mi trovo male