Um script para geo-localizar endereços IP em auth.log

2

Existe uma maneira de localizar automaticamente um endereço IP no Ubuntu linux? Eu estou olhando para fazer isso por erros no meu auth.log.

    
por C. Ross 20.11.2009 / 18:26

4 respostas

4

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).

    
por 20.11.2009 / 20:11
4

Deve ser bastante simples em Perl. Apenas pegue auth.log e obtenha uma lista de IPs com grep ou awk, então coloque sua lista de IPs em um script Perl, e use Geo :: IP para obter uma correspondência país / cidade a partir dele.

    
por 20.11.2009 / 18:49
1

De commandlinefu :

GeoipLookUp(){ curl -A "Mozilla/5.0" -s "http://www.geody.com/geoip.php?ip=$1" | grep "^IP.*$1" | html2text; }
    
por 20.11.2009 / 19:46
0

com python:

sudo add-apt-repository ppa:maxmind/ppa
sudo apt update
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin
sudo pip install geoip2

wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
tar xvfz GeoLite2-City.tar.gz

python -c 'import geoip2.database
reader = geoip2.database.Reader("./GeoLite2-City/GeoLite2-City.mmdb")
for line in open("/var/log/nginx/access.log').readlines():
    response = reader.city(line.split(" ")[0])
    print(dir(response))
'
    
por 11.10.2018 / 18:10