länderkennung wird verzögert um 5s geholt

Detail Tabelle für jeden Tag
This commit is contained in:
2025-01-28 00:28:27 +01:00
parent 7c36cde609
commit 8541d21fa3
4 changed files with 141063 additions and 6531 deletions

View File

@@ -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 ) {
@@ -96,7 +98,6 @@ for my $l ( @file ) {
} 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;
for my $query ( @$req ) {
$dbh->do('UPDATE banip_attacker set land = ? WHERE src = ?', undef, $query->{country}, $query->{query} );
}
# p $nolandips{$ar}; # p $nolandips{$ar};
for my $query ( @$req ) {
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} );
}
} }

70996
sys.log Normal file

File diff suppressed because it is too large Load Diff

69962
sys.log.1

File diff suppressed because it is too large Load Diff

6515
sys.log.2 Normal file

File diff suppressed because it is too large Load Diff