GeoIP: Como verificar a localização de um endereço IP ( com figuras )

7 03 2007

Sim, com figuras : D

Podemos utilizar a versão lite do GeoIP para verificamos de onde vem um visitante. Apenas vale observar que a precisão das informações desta versão não é a mais alta possível.

Se estiver utilizando linux (ou algum bsd), o processo é bastante simples (não sei em ambiente windows, lá é tudo muito difícil…). Vejamos:

  1. Efetue o download do arquivo com informações sobre cidades. O arquivo se encontra neste link. Aqui é o link direto para ele.

    Após efetuar o download, basta descompacta-lo com o comando:

    $ gunzip GeoLiteCity.dat.gz

  2. Utilizaremos o pacote do Pear Net_GeoIP para as requisições. A instalação é bastante simples:

    # pear install Net_GeoIP-beta

  3. Neste ponto, já estamos pronto para utilizar a extensão. Vejamos alguns exemplos de código em PHP:


    <?php
        
    // arquivo ipinfo.php
        
        
    require_once ‘Net/GeoIP.php’;

        // Em um outro codigo foi explicado o funcionamento de blocos
        // try / catch
        
    try {
            
    // instanciamos a classe Net_GeoIP, passando como parametro
            // o path daquele arquivo baixado anteriormente
            
    $gip Net_GeoIP::getInstance(‘GeoIPCity.dat’);
            
            
    // verificamos se foi executado corretamente.
            // caso nao tenha sido, gera uma exception
            
    if ( $argc != )
                throw new 
    Exception(‘Uso: php ip2city IP’);
            
            
    // o metodo lookupLocation retorna um objeto do tipo
            // Net_GeoIP_Location, que contem informacoes sobre a localizacao
            // para um determinado ip, passado como parametro para o metodo    
            
    $location $gip->lookupLocation($argv[1]);
            
            
    // finalmente, exibimos as informacoes
            
    echo sprintf(‘Pais: %s%s’$location->countryName“\n”);
            echo 
    sprintf(‘Cidade: %s%s’$location->city“\n”);

        } catch ( Exception $e ) {
            echo 
    sprintf(‘Erro: %s%s’$e->getMessage(), “\n”);
        }
    ?>

    $ host uol.com.br
    uol.com.br has address 200.221.2.45
    uol.com.br mail is handled by 10 mx.uol.com.br.
    $ php ipinfo.php 200.221.2.45
    Pais: Brazil
    Cidade: São Paulo
    $ host http://www.belgium.be
    http://www.belgium.be has address 193.191.209.193
    http://www.belgium.be mail is handled by 10 pop.fgov.be.
    $ php ipinfo.php 193.191.209.193
    Pais: Belgium
    Cidade: Brussels
    $ host google.com
    google.com has address 64.233.167.99
    $ php ipinfo.php 64.233.167.99
    Pais: United States
    Cidade: Mountain View

    Vamos ver nesse segundo exemplo como exibir em uma mapa a localização do endereço IP informado. Utilizaremos a API do yahoo para isso:


    <?php
        
    // arquivo ipmap.php

        // autor: e silva
        
        require_once ‘Net/GeoIP.php’;

        // observe que esta sendo utilizada uma chave demo. O yahoo diz que nao
        // se pode utilizar essa chave e que e’ necessario criar uma propria.
        // veja mais em http://developer.yahoo.com/maps/
        
    $yahooKey ‘YahooDemo’;
        
        
    $msg ;
        
        
    // Em um outro codigo foi explicado o funcionamento de blocos
        // try / catch
        
    try {

            // instanciamos a classe Net_GeoIP, passando como parametro
            // o path daquele arquivo baixado anteriormente
            
    $gip Net_GeoIP::getInstance(‘GeoIPCity.dat’);

            // verificamos se foi informado algum IP. Se nao foi,
            // utilizaremos o ip de quem esta acessando o script
            
    if ( !isset($_REQUEST[‘ip’]) )
                
    $_REQUEST[‘ip’] = $_SERVER[‘REMOTE_ADDR’];
            
    $ip $_REQUEST[‘ip’];
            
            
            
    // o metodo lookupLocation retorna um objeto do tipo
            // Net_GeoIP_Location, que contem informacoes sobre a localizacao
            // para um determinado ip, passado como parametro para o metodo    
            
    $location $gip->lookupLocation($ip);
            if ( !
    $location )
                throw new 
    Exception(‘Ip invalido’);
            
            
    // definimos algumas informacoes que serao utilizadas mais 
            // a frente no script
            
    $latitude $location->latitude;
            
    $longitude $location->longitude;
            
    $msg  sprintf(‘Pais:      <b>%s</b><br />’$location->countryName);
            
    $msg .= sprintf(‘Cidade:    <b>%s</b><br />’$location->city);
            
    $msg .= sprintf(‘Latitude:  <b>%s</b><br />’$location->latitude);
            
    $msg .= sprintf(‘Longitude: <b>%s</b><br />’$location->longitude);
        } catch ( 
    Exception $e ) {
            echo 
    sprintf(‘Erro: %s%s’$e->getMessage(), “\n”);
            die;
        }
        
        
    // e exibimos o mapa no navegador
    ?>

    <html>
        <head>
            <script type=”text/javascript” src=”http://api.maps.yahoo.com/ajaxymap?v=3.0&appid=<?=$yahooKey?>“></script>
        </head>
        <body>
            <?=$msg?>
            <div id=”map” style=”height:580px;width:780px;”></div>
            <script type=”text/javascript”>
                var position = new YGeoPoint(<?=$latitude?>,<?=$longitude?>);
                var map = new YMap(document.getElementById(‘map’));

                var loc = new YMarker(position);

                map.drawZoomAndCenter(position, 5);
                map.addTypeControl();
                map.setMapType(YAHOO_MAP_HYB);
                map.addOverlay(loc);
                map.addZoomLong();
                map.addPanControl();
            </script> 
        </body>
    </html>

    map to ip

    O script acima, apesar de não ter o html comentado, é bem simples de entender. Num post futuro podemos ver mais detalhadamente o uso de mapas usando API do yahoo, visto que o propósito neste post não é esse.

    Então é isso, é bastante simples a verificação da localização de um visitante através do endereço IP, mesmo utilizando a versão lite do geoip, o funcionamento é bem satisfatório.

    Arquivos:
    ipinfo.php
    ipmap.php

    É isso.

    Anúncios

Ações

Information

9 responses

31 07 2007
Rafael Tomelin

Quando vc chama o arquivo “require_once ‘Net/GeoIP.php’;”, vc já tem esse arquivo?

Pois só vi vc comentar sobre o arquivo mas não mostrou nada do mesmo

31 07 2007
E Silva

Sim, no passo 2 é feito download dele e colocado no include_path do PHP automagicamente:

Utilizaremos o pacote do Pear Net_GeoIP para as requisições. A instalação é bastante simples:
# pear install Net_GeoIP-beta

Maiores informações sobre este pacote aqui: http://pear.php.net/package/Net_GeoIP

1 08 2007
Rafael Tomelin

Ultimas dúvidas,…

Já está “funcioando”, porém não mostra a cidades e estados do brasil só do exterior. Sei isso pois entrei num proxy publico e vi o mesmo.

Tem que atualizar algumas das bases?

2 08 2007
E Silva

Nos testes que fiz, São Paulo e Curitiba eram identificadas corretamente.
O problema pode ser pelo fato de estar utilizando uma versão simplificada da base de dados. A versão completa – e mais precisa – não é gratuíta. Provavelmente funcione melhor se você conseguir uma dessas.

24 05 2008
rodrigo azevedo

Legal!

20 08 2010
andreluizrodper

Legal.

Estava procurando exatamente isso.

Até

28 09 2010
solange

gostaria de mais informações para descobrir o ip de e-mails que estou recebendo, se puder me ajudar desde já agradeço

31 01 2011
Fabricio Rodrigues

Olá,
Então fiz exatamente como descrito acima, mas me deparo com esse erro!

Erro: Unable to open file: GeoIPCity.dat

Não sei o que fazer agora!!!

Abraço!

9 12 2011
Nex2

Não funciona

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: