1. Implementando Rotinas
de Geolocalização
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 1 / 21
2. Quem?!
Er Galvão Abbott trabalha há mais de 16 anos
desenvolvendo sistemas e aplicações com interface web.
Palestra em eventos, dá cursos em diversas instituições e
é o Diretor da PHP Conference Brasil, o principal evento de PHP
da América Latina.
Especializou-se em segurança de aplicações web,
abordando o tema em uma época quando isso ainda era raro no
Brasil. Trabalhou com diversas empresas de grande parte, tanto
nacionais como internacionais.
É o fundador e líder do GU PHPBR, Grupo de Usuários
de abrangência nacional, que hoje conta com mais de 1.200
usuários cadastrados.
Site: http://www.galvao.eti.br/
Twitter: @galvao
Slides e Documentos: http://slideshare.net/ergalvao
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 2 / 21
3. Objetivo
Demonstrar conceitos e detalhes – tanto técnicos quanto não-técnicos – envolvidos
na implementação de rotinas de Geolocalização em aplicações web. Abordaremos os
seguintes tópicos:
→ Introdução
→ O projeto
→ ISOs envolvidas
→ Sobre IPv4 e IPv6
→ Falhas conceituais
→ Falhas inerentes
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 3 / 21
4. Introdução
Existem três formas de se implementar uma rotina de Geolocalização em uma
aplicação:
→ Utilização de Posicionamento Global por Satélite (GPS)
→ Posicionamento do dispositivo conectado (Triangulação por torres de transmissão)
→ Análise de endereço IP (GeoIP)
Embora as duas primeiras ofereçam uma grande vantagem na precisão, a terceira
se aplica a qualquer dispositivo, móvel ou não, e será o foco desta apresentação.
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 4 / 21
5. Introdução - Maxmind
A Maxmind é uma empresa que fornece bases de dados de GeoIP. Foi escolhida
por possuir uma precisão razoável e por oferecer versões gratuitas de suas bases de
dados, além de uma API pronta em PHP e diversas outras linguagens.
Principais vantagens:
↑ Precisão de 99.8% (nível de país) e de 72% (nível de cidade no caso do Brasil)
↑ APIs prontas para C, C#, Java, Perl e PHP.
↑ Atualizado mensalmente
↑ Formato binário para uso com a API ou CSV para importação direta
Principais desvantagens:
↓ Suporte confuso para PHP (“port” para PHP5, fork “melhorado”)
↓ Compatibilidade limitada com IPv6
↓ Divisão de dados em dois arquivos CSV
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 5 / 21
9. O Projeto
X
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 9 / 21
10. Por que não pode ser simples?
X Problemas de performance
X Problemas em caso de imprecisão da base de dados
X Não é renovável
X Apenas uma fonte de pesquisa
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 10 / 21
11. Objetivos
a Performance, maior inteligência na localização
a Precisão, mesmo sem automação total
a Renovável, “correção automatizada”
a Mais de uma fonte de pesquisa, maior precisão e confiabilidade
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 11 / 21
12. Conceitos do Projeto
177.18.69.152
Classes A B C D
IP (v4) 177 18 69 152
→ IPs pertencentes a mesma Classe C são, normalmente, agrupados na mesma geolocalização
→ IPs/CCs geolocalizados incorretamente precisam de correção manual
→ IPs/CCs corrigidos manualmente são bloqueados (“locked”)
→ Todos os dados não bloqueados possuem um “TTL”
→ TTL é o tempo pelo qual um IP/CC não precisará ser verificado novamente
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 12 / 21
13. Conceitos do Projeto
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 13 / 21
14. ISOs
→ ISO 3166-1 Alpha 2 – http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
Código único para cada país, contendo duas letras. É, com raras exceções, o mesmo
código utilizado nos ccTLDs (Country Code Top-Level Domains).
Por ser único e ocupar pouco espaço pode ser indexado.
p. ex.: BR (Brasil), AR (Argentina), US (Estados Unidos), etc...
→ ISO 3166-2:XY, onde “XY” é um ISO 3166 Alpha2
Código único para subdivisões de cada país (Estados, Territórios, Condados, etc...),
composto de duas letras para o país (sendo estas duas letras o ISO 3166-1 Alpha 2 do país),
um hífen e dois caracteres para a subdivisão em si.
Tomando como exemplo o Brasil (http://en.wikipedia.org/wiki/ISO_3166-2:BR):
BR-SP (São Paulo), BR-RJ (Rio de Janeiro), etc...
Não indexado em nosso projeto, por razões específicas.
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 14 / 21
15. IPv4 e IPv6
O que é importante levar em consideração:
→ Enquanto o IPv4 é representado por 4 grupos de 8 bits, ou octetos, como por exemplo:
192.168.100.1
O IPv6 é representado por 8 grupos de 16 bits, ou grupos de valores hexadecimais:
2001:0DB8:0000:0000:130F:0000:0000:140B
→ Não existe conversão de IPv4 para IPv6, o que existe é o que se chama de IPv4-mapeado.
Usando a notação de IPv4-mapeado, teríamos o endereço anterior representado como:
::FFFF:192.168.100.1 ou
0:0:0:0:0:FFFF:192.168.100.1 ou ainda
0000:0000:0000:0000:0000:FFFF:192.168.100.1
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 15 / 21
18. Falhas conceituais
X Atualização de dados não prevista
X Excesso de confiança na localização por Classe C
X Investimento zero
? Exigir interação do cliente
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 18 / 21
20. Conclusão
Geolocalização é uma feature cada vez mais importante em um número crescente
de projetos. Embora seja possível implementar uma rotina razoável de geolocalização
com pouco ou nenhum custo, o projeto ideal passa por uma série de questões que
diferem bastante do apresentado aqui:
→ Investimento em serviços de qualidade para prover os dados
→ Utilização das três formas (GPS, Triangulação e GeoIP), havendo uma tomada de
decisão, dependendo do caso, para qual forma deve ser preferida.
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 20 / 21
21. Obrigado!
? Dúvidas?
↓ Críticas?
↑ Elogios?!
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 8/7/12 - 21 / 21