Ubuntu PreReqs: em sudo apt-get install libgeoip1 libgeo-ip-perl libregexp-common-perl
Script por mim apenas para você:
#Parses out ip and prints ip followed by country
use strict;
use warnings;
use Regexp::Common qw /net/;
use Geo::IP;
my $gi = Geo::IP->new(GEOIP_STANDARD);
while (<>) {
#Following matches IPv4 addresses and stores the result in $1
#The way this is now, it will only do the first IP on each line
if (/($RE{net}{IPv4})/g) {
print $1 . ':' . $gi->country_code_by_addr($1);
}
}
Input Output:
65.19.146.2
65.19.146.2:US
65.19.146.2
220.248.0.0:CN
O script apenas faz um loop sobre sua entrada, então se o script é chamado foo.pl e é executável, você pode fazer algo como cat access.log | foo.pl
. Se você quiser detalhes mais precisos, veja Geo :: IP perl documentação do módulo (e talvez seja necessário instalar um banco de dados diferente).