Como pegar informações do local através do IP

Pessoal,

Vocês sabem como eu faço pra pegar as informações sobre o local (país, estado, cidade) através do IP? Muitos sistemas de internet hoje em dia fazem isso, inclusive o google.

Como fazer? Preciso comprar algum banco de dados? Existe algum webservice que me responda isso?

Alguém já implementou ou tem alguma dica?

Obrigado.