Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- sub printHash
- {
- my %hash = %{$_[0]};
- print "$_: $hash{$_}\n" for (sort keys %hash);
- }
- $fileName = $ARGV[0];
- if (!stat $fileName)
- {
- print "File doesn't existe!\n\n";
- exit;
- }
- open(FH, "<", $fileName) or die "Can't open file: $!";
- %langs = undef;
- %countries = undef;
- %ipAddresses = undef;
- %agents = undef;
- %services = undef;
- @ipAddresses2 = undef;
- @times2 = undef;
- while (<FH>)
- {
- my ($dateTime, $ipCode, $len, $service) = split(/, /, $_);
- my ($usless, $agent) = split(/\), /, $_);
- chomp($agent);
- my ($date, $time) = split(/ /, $dateTime);
- my ($ip, $code) = split(/,/, $ipCode);
- $ip = substr $ip, 1, -2;
- $isDate = $date =~ /\d{4}-\d{2}-\d{2}/;
- $isTime = $time =~ /\d\d:\d\d:\d\d/i;
- $isIp = $ip =~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/i;
- $isCode = $code =~ /[a-z]{2}\/[A-Z]{2}/;
- $isLen = $len =~ /[0-9]+/;
- $isService = $service =~ /\w+([a-z0-9,=_]*)/i;
- $isAgent = $agent =~ /^AGENT=/;
- $isCorrect = $isDate && $isTime && $isIp && $isCode && $isLen && $isService && $isAgent;
- if (!$isCorrect)
- {
- print "Wrong structure of file! $service\n";
- exit;
- }
- my ($hour, $minute, $second) = split (/:/, $time);
- $seconds = $second + 60 * $minute + 3600 * $hour;
- my ($lang, $country) = split(/\//, $code);
- if (!defined($langs{$lang}))
- {
- $langs{$lang} = 1;
- }
- else
- {
- $langs{$lang} = $langs{$lang} + 1;
- }
- if (!defined($countries{$country}))
- {
- $countries{$country} = 1;
- }
- else
- {
- $countries{$country} = $countries{$country} + 1;
- }
- if (!defined($ipAddresses{$ip}))
- {
- $ipAddresses{$ip} = 1;
- }
- else
- {
- $ipAddresses{$ip} = $ipAddresses{$ip} + 1;
- }
- if (!defined($agents{$agent}))
- {
- $agents{$agent} = 1;
- }
- else
- {
- $agents{$agent} = $agents{$agent} + 1;
- }
- my ($service, $usless) = split(/\(/, $service);
- if (!defined($services{$service}))
- {
- $services{$service} = 1;
- }
- else
- {
- $services{$service} = $services{$service} + 1;
- }
- $ipAddresses2[++$#ipAddresses2] = $ip;
- $times2[++$#times2] = $seconds;
- }
- close(FH) or warn("Closed failed!\n\n");
- print "Języki:\n\n";
- printHash(\%langs);
- print "\nKraje:\n\n";
- printHash(\%countries);
- print "\nAdresy IP:\n\n";
- printHash(\%ipAddresses);
- print "\nPrzeglądarki:\n\n";
- printHash(\%agents);
- print "\nUsługi:\n\n";
- printHash(\%services);
- @ipies = undef;
- for ($i = 0; $i < $#times2; $i++)
- {
- $ip = $ipAddresses2[$i];
- $time = $times2[$i];
- for ($j = $i + 1; $j < $#times2; $j++)
- {
- $ip2 = $ipAddresses2[$j];
- if ($ip2 eq $ip)
- {
- $time2 = $times2[$j];
- if ($time2 - $time < 2)
- {
- push(@ipies, $ip);
- }
- }
- }
- }
- %ipiesHash = undef;
- foreach $dupa(@ipies)
- {
- if (!defined($ipiesHash{$dupa}))
- {
- $ipiesHash{$dupa} = "";
- }
- }
- print "\nAdresy IP, spod których wykonywano dostępy w odstępach czasu krótszych niż 2 sekundy:\n\n";
- print "$_\n" for (sort keys %ipiesHash);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement