Análise de arquivo de log GeoIP baseada em shell

Eu precisava fazer estatísticas sobre os países dos usuários para um de nossos aplicativos, com base nos endereços IP armazenados em um arquivo de log.

Usei apenas comandos shell para esta extração.

  1. Baixe as ferramentas Geoip C da MaxMind para obter informações da linha de comando: http://www.maxmind.com/download/geoip/api/c/

Você pode escolher a versão mais recente da ferramenta.

  1. Construir as ferramentas geoip

Descompacte o arquivo baixado.

Construa o software com os seguintes comandos:

As duas linhas a seguir são necessárias no MacOSX (Mountain Lion), para evitar o erro de compilação: ‘sed: erro RE: sequência de bytes ilegal’

$ export LC_COLLATE='C'
$
export LC_CTYPE='C'

Você pode então construir o software

$ ./configure && make
$ sudo make install
  1. Baixe um arquivo de banco de dados:

Você precisa baixar um arquivo de banco de dados IP da MaxMind. Usei o banco de dados GeoIP Lite gratuito: http://dev.maxmind.com/geoip/geolite

Usei o arquivo de banco de dados GeoLite Country simples. Isso me dá o arquivo de banco de dados GeoIP.dat .

  1. Consultar um único endereço IP

    $ geoiplookup -f GeoIP.dat 33.12.126.143
    GeoIP Country Edition: FR, França

Posso cortar as partes indesejadas:

$ geoiplookup -f GeoIP.dat 93.20.226.243 | cut -f2 -d ','| sed -e 's/^[ t]*//'
France

Você pode então usar isso em comandos mais complexos (Nota: Locale é para suporte Unicode em nomes de países):

$ export LC_ALL=C
$ sort
-t '|' -k7 myfile.log | cut -f7 -d '|' | uniq > ip.txt
$ IPS
=`cat ip.txt`
$
for i in $IPS; do geoiplookup -f GeoIP.dat $i ; done | cut -f2 -d ','| sed -e 's/^[ t]*//' > countries.txt

Isso fornece uma linha por país para cada endereço IP.

Você pode então usar seu conhecimento do shell Bash para refinar à vontade. Aproveitar !