Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.34 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. sub printHash
  4. {
  5.     my %hash = %{$_[0]};
  6.    
  7.     print "$_: $hash{$_}\n" for (sort keys %hash);
  8. }
  9.  
  10. $fileName = $ARGV[0];
  11.  
  12. if (!stat $fileName)
  13. {
  14.     print "File doesn't existe!\n\n";
  15.     exit;
  16. }
  17.  
  18. open(FH, "<", $fileName) or die "Can't open file: $!";
  19.  
  20. %langs = undef;
  21. %countries = undef;
  22. %ipAddresses = undef;
  23. %agents = undef;
  24. %services = undef;
  25.  
  26. @ipAddresses2 = undef;
  27. @times2 = undef;
  28.  
  29. while (<FH>)
  30. {
  31.     my ($dateTime, $ipCode, $len, $service) = split(/, /, $_);
  32.     my ($usless, $agent) = split(/\), /, $_);
  33.    
  34.     chomp($agent);
  35.    
  36.     my ($date, $time) = split(/ /, $dateTime);
  37.     my ($ip, $code) = split(/,/, $ipCode);
  38.    
  39.     $ip = substr $ip, 1, -2;
  40.    
  41.     $isDate = $date =~ /\d{4}-\d{2}-\d{2}/;
  42.     $isTime = $time =~ /\d\d:\d\d:\d\d/i;
  43.     $isIp = $ip =~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/i;
  44.     $isCode = $code =~ /[a-z]{2}\/[A-Z]{2}/;
  45.     $isLen = $len =~ /[0-9]+/;
  46.     $isService = $service =~ /\w+([a-z0-9,=_]*)/i;
  47.     $isAgent = $agent =~ /^AGENT=/;
  48.    
  49.     $isCorrect = $isDate && $isTime && $isIp && $isCode && $isLen && $isService && $isAgent;
  50.    
  51.     if (!$isCorrect)
  52.     {
  53.         print "Wrong structure of file! $service\n";
  54.         exit;
  55.     }
  56.    
  57.     my ($hour, $minute, $second) = split (/:/, $time);
  58.    
  59.     $seconds = $second + 60 * $minute + 3600 * $hour;
  60.    
  61.     my ($lang, $country) = split(/\//, $code);
  62.    
  63.     if (!defined($langs{$lang}))
  64.     {
  65.         $langs{$lang} = 1;
  66.     }
  67.     else
  68.     {
  69.         $langs{$lang} = $langs{$lang} + 1;
  70.     }
  71.    
  72.     if (!defined($countries{$country}))
  73.     {
  74.         $countries{$country} = 1;
  75.     }
  76.     else
  77.     {
  78.         $countries{$country} = $countries{$country} + 1;
  79.     }
  80.    
  81.     if (!defined($ipAddresses{$ip}))
  82.     {
  83.         $ipAddresses{$ip} = 1;
  84.     }
  85.     else
  86.     {
  87.         $ipAddresses{$ip} = $ipAddresses{$ip} + 1;
  88.     }
  89.    
  90.     if (!defined($agents{$agent}))
  91.     {
  92.         $agents{$agent} = 1;
  93.     }
  94.     else
  95.     {
  96.         $agents{$agent} = $agents{$agent} + 1;
  97.     }
  98.    
  99.     my ($service, $usless) = split(/\(/, $service);
  100.    
  101.     if (!defined($services{$service}))
  102.     {
  103.         $services{$service} = 1;
  104.     }
  105.     else
  106.     {
  107.         $services{$service} = $services{$service} + 1;
  108.     }
  109.  
  110.     $ipAddresses2[++$#ipAddresses2] = $ip;
  111.     $times2[++$#times2] = $seconds;
  112. }
  113.  
  114. close(FH) or warn("Closed failed!\n\n");
  115.  
  116. print "Języki:\n\n";
  117. printHash(\%langs);
  118.  
  119. print "\nKraje:\n\n";
  120. printHash(\%countries);
  121.  
  122. print "\nAdresy IP:\n\n";
  123. printHash(\%ipAddresses);
  124.  
  125. print "\nPrzeglądarki:\n\n";
  126. printHash(\%agents);
  127.  
  128. print "\nUsługi:\n\n";
  129. printHash(\%services);
  130.  
  131. @ipies = undef;
  132.  
  133. for ($i = 0; $i < $#times2; $i++)
  134. {
  135.     $ip = $ipAddresses2[$i];
  136.     $time = $times2[$i];
  137.    
  138.     for ($j = $i + 1; $j < $#times2; $j++)
  139.     {
  140.         $ip2 = $ipAddresses2[$j];
  141.        
  142.         if ($ip2 eq $ip)
  143.         {
  144.             $time2 = $times2[$j];
  145.            
  146.             if ($time2 - $time < 2)
  147.             {
  148.                 push(@ipies, $ip);
  149.             }
  150.         }
  151.     }
  152. }
  153.  
  154. %ipiesHash = undef;
  155.  
  156. foreach $dupa(@ipies)
  157. {
  158.     if (!defined($ipiesHash{$dupa}))
  159.     {
  160.         $ipiesHash{$dupa} = "";
  161.     }
  162. }
  163.  
  164. print "\nAdresy IP, spod których wykonywano dostępy w odstępach czasu krótszych niż 2 sekundy:\n\n";
  165. print "$_\n" for (sort keys %ipiesHash);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement