länderkennung wird verzögert um 5s geholt
Detail Tabelle für jeden Tag
This commit is contained in:
121
ban2mysql.pl
121
ban2mysql.pl
@@ -23,7 +23,7 @@ my $month2int = {
|
|||||||
'sep' => '09',
|
'sep' => '09',
|
||||||
'oct' => '10',
|
'oct' => '10',
|
||||||
'nov' => '11',
|
'nov' => '11',
|
||||||
'dez' => '12'
|
'dec' => '12'
|
||||||
};
|
};
|
||||||
|
|
||||||
# Connect to the database.
|
# Connect to the database.
|
||||||
@@ -31,7 +31,7 @@ my $dbh = DBI->connect("DBI:MariaDB:database=kram;host=edna",
|
|||||||
"steffen", "66WXRlvF0UUV",
|
"steffen", "66WXRlvF0UUV",
|
||||||
{'RaiseError' => 1});
|
{'RaiseError' => 1});
|
||||||
|
|
||||||
my @file = read_file('sys.log.1');
|
my @file = read_file('sys.log');
|
||||||
|
|
||||||
my $ua = Mojo::UserAgent->new();
|
my $ua = Mojo::UserAgent->new();
|
||||||
|
|
||||||
@@ -40,12 +40,13 @@ my %nolandips;
|
|||||||
my $hundred = 0;
|
my $hundred = 0;
|
||||||
my $first = 0;
|
my $first = 0;
|
||||||
|
|
||||||
|
my $country = $dbh->selectcol_arrayref('SELECT country, cid FROM banip_country', {Columns=>[1, 2]});
|
||||||
|
my %coun = @$country;
|
||||||
|
|
||||||
$nolandips{$first} = ();
|
$nolandips{$first} = ();
|
||||||
|
|
||||||
for my $l ( @file ) {
|
for my $l ( @file ) {
|
||||||
my ( $month, $day, $h, $m, $s, $kat, $src, $dst, $port ) = $l =~ /(.*?) (.*?) (..):(..):(..) 192.*banIP\/...-wan\/drop\/(.*?):.*SRC=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) DST=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*DPT=(\d+)/;
|
my ( $month, $day, $h, $m, $s, $kat, $src, $dst, $port ) = $l =~ /(.*?) (.*?) (..):(..):(..) 192.*banIP\/...-wan\/drop\/(.*?):.*SRC=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) DST=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*DPT=(\d+)/;
|
||||||
#$ua->get("http://ip-api.com/json/$src" => {Accept => '*/*'})->result->body;
|
|
||||||
# p $ua;
|
|
||||||
|
|
||||||
my $dt = '';
|
my $dt = '';
|
||||||
if ( $month ) {
|
if ( $month ) {
|
||||||
@@ -60,10 +61,11 @@ for my $l ( @file ) {
|
|||||||
second => $s
|
second => $s
|
||||||
);
|
);
|
||||||
|
|
||||||
# p $dt;
|
my $id;
|
||||||
|
|
||||||
my $da = $dbh->selectrow_hashref('SELECT * FROM banip_attacker WHERE src = ? and port = ?', undef, $src, $port );
|
my $da = $dbh->selectrow_hashref('SELECT * FROM banip_attacker WHERE src = ? and port = ?', undef, $src, $port );
|
||||||
if ( $da ) {
|
if ( $da ) {
|
||||||
|
$id = $da->{id};
|
||||||
my ( $year2, $month2, $day2, $h2, $m2, $s2) = $da->{updated} =~ /(....)-(..)-(..) (..):(..):(..)/;
|
my ( $year2, $month2, $day2, $h2, $m2, $s2) = $da->{updated} =~ /(....)-(..)-(..) (..):(..):(..)/;
|
||||||
my $dt2 = DateTime->new(
|
my $dt2 = DateTime->new(
|
||||||
year => $year2,
|
year => $year2,
|
||||||
@@ -80,7 +82,7 @@ for my $l ( @file ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( ! $nolandforip{$src} ) {
|
if ( ! $nolandforip{$src} ) {
|
||||||
if ( !$da->{land} ) {
|
if ( !$da->{cid} ) {
|
||||||
$nolandforip{$src} = 1;
|
$nolandforip{$src} = 1;
|
||||||
|
|
||||||
if ( $hundred == 100 ) {
|
if ( $hundred == 100 ) {
|
||||||
@@ -90,13 +92,12 @@ for my $l ( @file ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
push @{$nolandips{$first}}, {"query"=> $src, "fields"=> "country,countryCode,query", "lang"=> "de"};
|
push @{$nolandips{$first}}, {"query"=> $src, "fields"=> "country,countryCode,query", "lang"=> "de"};
|
||||||
$hundred ++;
|
$hundred ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
||||||
$dbh->do(
|
$dbh->do(
|
||||||
'INSERT INTO banip_attacker (
|
'INSERT INTO banip_attacker (
|
||||||
created,
|
created,
|
||||||
@@ -117,21 +118,109 @@ for my $l ( @file ) {
|
|||||||
$src,
|
$src,
|
||||||
$dst,
|
$dst,
|
||||||
$port,
|
$port,
|
||||||
$kat);
|
$kat
|
||||||
|
);
|
||||||
|
$id = $dbh->last_insert_id();
|
||||||
|
|
||||||
|
$nolandforip{$src} = 1;
|
||||||
|
|
||||||
|
if ( $hundred == 100 ) {
|
||||||
|
$first ++;
|
||||||
|
$nolandips{$first} = ();
|
||||||
|
$hundred = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
push @{$nolandips{$first}}, {"query"=> $src, "fields"=> "country,countryCode,query", "lang"=> "de"};
|
||||||
|
$hundred ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $attack_days = $dbh->selectrow_hashref(
|
||||||
|
'SELECT
|
||||||
|
*
|
||||||
|
FROM banip_attacker_days
|
||||||
|
WHERE
|
||||||
|
id = ? and
|
||||||
|
datum = ?',
|
||||||
|
undef,
|
||||||
|
$id,
|
||||||
|
"$year-$month-$day"
|
||||||
|
);
|
||||||
|
if ( $attack_days ) {
|
||||||
|
my ( $h2, $m2, $s2) = $attack_days->{ende} =~ /(..):(..):(..)/;
|
||||||
|
my $dt2 = DateTime->new(
|
||||||
|
year => $year,
|
||||||
|
month => $month,
|
||||||
|
day => $day,
|
||||||
|
hour => $h2,
|
||||||
|
minute => $m2,
|
||||||
|
second => $s2
|
||||||
|
);
|
||||||
|
|
||||||
|
my $cmp = DateTime->compare( $dt1, $dt2 );
|
||||||
|
if ( $cmp == 1 ) {
|
||||||
|
$dbh->do(
|
||||||
|
'UPDATE banip_attacker_days set
|
||||||
|
count = count + 1,
|
||||||
|
ende = ?
|
||||||
|
WHERE
|
||||||
|
aid = ?',
|
||||||
|
undef,
|
||||||
|
"$h:$m:$s",
|
||||||
|
$attack_days->{aid}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$dbh->do(
|
||||||
|
'INSERT INTO banip_attacker_days (
|
||||||
|
id,
|
||||||
|
datum,
|
||||||
|
count,
|
||||||
|
beginn,
|
||||||
|
ende)
|
||||||
|
VALUES (
|
||||||
|
?,
|
||||||
|
?,
|
||||||
|
?,
|
||||||
|
?,
|
||||||
|
?
|
||||||
|
)', undef,
|
||||||
|
$id,
|
||||||
|
"$year-$month-$day",
|
||||||
|
1,
|
||||||
|
"$h:$m:$s",
|
||||||
|
"$h:$m:$s"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Land über IP von ip-api.com holen batch mit jeweils 100 ips
|
||||||
for my $ar ( keys %nolandips ) {
|
for my $ar ( keys %nolandips ) {
|
||||||
|
sleep(5);
|
||||||
my $req = $ua->post("http://ip-api.com/batch" => {Accept => '*/*'} => json => $nolandips{$ar} )->result->json;
|
my $req = $ua->post("http://ip-api.com/batch" => {Accept => '*/*'} => json => $nolandips{$ar} )->result->json;
|
||||||
# p $req;
|
# p $nolandips{$ar};
|
||||||
|
|
||||||
for my $query ( @$req ) {
|
for my $query ( @$req ) {
|
||||||
$dbh->do('UPDATE banip_attacker set land = ? WHERE src = ?', undef, $query->{country}, $query->{query} );
|
my $cid;
|
||||||
|
# land in Datenbank bekannt cid zuordnen
|
||||||
|
if ( $coun{$query->{country}} ) {
|
||||||
|
$cid = $coun{$query->{country}};
|
||||||
|
} else {
|
||||||
|
# Land nicht bekannt eintragen und neue id zuordnen
|
||||||
|
$dbh->do(
|
||||||
|
'INSERT INTO banip_country (
|
||||||
|
country,
|
||||||
|
countryCode)
|
||||||
|
VALUES (
|
||||||
|
?,
|
||||||
|
?)', undef,
|
||||||
|
$query->{country},
|
||||||
|
$query->{countryCode},
|
||||||
|
);
|
||||||
|
$cid = $dbh->last_insert_id();
|
||||||
|
$coun{$query->{country}} = $cid;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dbh->do('UPDATE banip_attacker set cid = ? WHERE src = ?', undef, $cid, $query->{query} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# p $nolandips{$ar};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user