[ Pobierz całość w formacie PDF ]
# gdyz bez niego, wszelkie pakiety i polaczenia zlalyby sie w jedno polaczenie
# 5. statystyki sa generowane tylko dla tych polaczen, ktorych pierwszy pakiet
# (inicjujacy)znajduje siÄ™ w logu
use Time::Local qw(timelocal);
print "\n\n\n\n";
print "Firewall logs (ipchains) analiser. Majka, Koscielniak, Nowak (c) 2002\n";
print "All rights reserved to above authors (May change in future).\n";
print "_____________________________________________________________________\n";
print "Processing...\n";
$errorflag = 0;
open(LOGFILE, $ARGV[0]) or $errorflag = 1;
if ($errorflag == 1) {
print "$0: nie znaleziono pliq\n";
die;
}
$firstdate = "";
$date = "";
$total_traffic = 0;
$howmany = 0;
$all = 0;
while ( ) {
next unless /Packet log: forward MASQ/i;
$all++;
chomp;
@log = split;
#znalazlem w wsieci, ze ipchains ma czasami dziwne jazdy, wiec ja je usuwam...
for (@log) { $_ =~ s/\)/\\\)/g; $_ =~ s/\(/\\\(/g; }
($month,$day,$time,$policy,$proto,$ipsource,$ipdest,$tot_len, $orderID, $isStart) =
@log[0,1,2,8,10,11,12,13,15,18];
if (length($month) eq 0 or
length($day) eq 0 or
length($policy) eq 0 or
length($proto) eq 0 or
length($ipsource) eq 0 or
length($ipdest) eq 0 or
length($tot_len) eq 0 or
Plik: final_dokumentation_release_2.0 Wersja: 1.0- z dnia 21.06.2002 Stron: 63 Długość: 872 kB
Copyright © 2002 Akademia Górniczo-Hutnicza Prowadzenie zajęć: mgr inż. BogusÅ‚aw Juza
60
Piotr Nowak, Artur Majka, Dariusz Kościelniak Firewall - metody filtracji
length($orderID) eq 0 ) {
next;
}
$date = $day . " " . $month . " " . $time;
if (length($firstdate) == 0) {
$firstdate = $date;
}
$lastdate = $date;
($flush, $protocol) = split "=", $proto;
($ips, $ports) = split ":", $ipsource;
($ipd, $portd) = split ":", $ipdest;
($flush, $packetlen) = split "=", $tot_len;
($flush, $packetcounter) = split "=", $orderID;
if (length($ips) eq 0 or
length($ports) eq 0 or
length($ipd) eq 0 or
length($portd) eq 0 or
length($packetlen) eq 0 or
length($packetcounter) eq 0) {
next;
}
#taka walidacja na wszelki wypadek ;)
if ($ips !~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/ or
$ipd !~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/ or
$ports !~ /[0-9]{1,5}$/ or
$portd !~ /[0-9]{1,5}$/ or
$packetlen !~ /[0-9]+$/ or
$packetcounter !~ /[0-9]+$/ ) {
next;
}
$connection_id = $ips . " " . $ipd . " " . $portd;
#jedno wielkie zalozenie: z jednego hosta:portu w sieci NIE MOZNA wyslac dwoch pakietow
#do roznych hostow, chyba ze rozpoczeto na tym hoscie i na tym porcie NOWE polaczenie
if ($isStart eq "SYN") {
$insert_new = 1;
if (exists $last_connection{$connection_id}) {
if (length($ARGV[1]) eq 0) {
#znalezlismy polaczenie z tego hosta - sprawdzamy czy dluzej niz 5 minut
temu
$index = $last_connection{$connection_id} . " " . $connection_id;
$diff_t = &calc_diff($connection_last_date{$index}, $date);
if ($diff_t
$insert_new = 0;
}
} else {
$insert_new = 0;
}
}
if ($insert_new eq 1) {
$index = $packetcounter . " " . $connection_id;
$last_connection{$connection_id} = $packetcounter;
$connection_last_date{$index} = $date;
$connection_begining{$index} = $date;
$connection_out{$ips}++;
$connection_in{$ipd}++;
} else {
$connection_last_date{$index} = $date;
}
} else {
unless (exists $last_connection{$connection_id}) {
Plik: final_dokumentation_release_2.0 Wersja: 1.0- z dnia 21.06.2002 Stron: 63 Długość: 872 kB
Copyright © 2002 Akademia Górniczo-Hutnicza Prowadzenie zajęć: mgr inż. BogusÅ‚aw Juza
61
Piotr Nowak, Artur Majka, Dariusz Kościelniak Firewall - metody filtracji
#pakiet dotyczy polaczenia, ktorego poczatek nie byl w logach -> wyrzucamy
next;
}
$index = $last_connection{$connection_id} . " " . $connection_id;
$connection_last_date{$index} = $date;
}
#zliczamy sobie liczbe pakietow wyslanych z hosta
++$packetsFrom{$ips};
#zliczamy liczbe pakietow wyslanych do hosta na zewnatrz
++$packetsTo{$ipd};
#zliczamy liczbe bajtow wogule
$total_traffic += $packetlen;
#i liczbe bajtow na host w intranecie
$traffichost{$ips} += $packetlen;
#liczba bajtow na host w internecie
$traffichost_dest{$ipd} += $packetlen;
#a takze ile pakietow uwzglednilismy w analizie
$howmany++;
}
print "\nReport generated.\n\n";
print "Found ",$all," packets. The ",$howmany," of them passed validation and was
included in report.\n";
print "\n\nConnection traffic analisys:\n\n";
for (sort keys %connection_begining) {
($flush, $host, $host_d, $port_d) = split " ", $_;
$diff = &calc_diff($connection_begining{$_}, $connection_last_date{$_});
print "From $connection_begining{$_} during $diff seconds host ",
$host ," was connected to $host_d:$port_d \n";
}
print "\n\n";
print "Source traffic analisys:\n\n";
for (sort keys %traffichost) {
print "Host ", $_, " send out ", $traffichost{$_}, " bytes in ", $packetsFrom{$_} ,"
packets and ",$connection_out{$_}," connections.\n";
}
print "\n\nDestination traffic analisys:\n\n";
for (sort keys %traffichost_dest) {
print "Host ", $_, " received ", $traffichost_dest{$_}, " bytes in ", $packetsTo{$_}
," packets and ",$connection_in{$_}," connections.\n";
}
print "\n\nTotal bytes send out: ",$total_traffic,"\n\n";
sub calc_diff { #pierwsza data jest starsza
($day, $moth, $t) = split " ", $_[0];
($h, $m, $s) = split ":", $t;
($dayn, $mothn, $tn) = split " ", $_[1];
($hn, $mn, $sn) = split ":", $tn;
$month = $monthn = 5;
[ Pobierz całość w formacie PDF ]