Есть ли способ автоматически определять местоположение IP-адреса в Ubuntu linux? Я хочу сделать это из-за ошибок в моем журнале auth.log.
В Perl это должно быть довольно просто. Просто возьмите auth.log и получите список IP-адресов с помощью grep или awk, затем передайте свой список IP-адресов в Perl-скрипт и используйте Гео :: IP чтобы получить от него соответствие страны / города.
Предварительные требования Ubuntu:
sudo apt-get install libgeoip1 libgeo-ip-perl libregexp-common-perl
Написанный мной сценарий только для вас:
#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);
}
}
Ввод, вывод:
65.19.146.2
65.19.146.2:US
65.19.146.2
220.248.0.0:CN
Сценарий justs перебирает его ввод, поэтому, если сценарий называется foo.pl и является исполняемым, вы можете просто сделать что-то вроде cat access.log | foo.pl
. Если вам нужны более точные сведения, см. Гео :: IP документы модуля perl (и вам может потребоваться установить другую базу данных).
Из командная строка:
GeoipLookUp(){ curl -A "Mozilla/5.0" -s "http://www.geody.com/geoip.php?ip=$1" | grep "^IP.*$1" | html2text; }
с питоном:
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))
'