snort-sort.pl
上传用户:mosfetic
上传日期:2022-01-05
资源大小:2k
文件大小:4k
源码类别:

扫描程序

开发平台:

Visual C++

  1. #!/usr/bin/perl
  2. #
  3. # Filename:     snort-sort
  4. # Author:       Andrew R. Baker <andrewb@uab.edu>
  5. # Modified:     2000.03.06
  6. # Purpose:      this script produces a sorted list of snort alerts
  7. #               from a snort alert file
  8. # Version:      0.02
  9. # let me know if you like this and use it  -Andrew
  10. #
  11. # Todo:         1) Allow processing of snort alerts from syslog
  12. #               2) Make html output optional
  13. #
  14. # Change History:
  15. #
  16. # 2000.03.07    reverse DNS lookup 
  17. #                 derived from snort_stat.pl 
  18. #                 and code donated by Adam Olson <adamo@quaartz.com>
  19. #               whois link option
  20. #                 derived from code donated by Adam Olson <adamo@quaartz.com>
  21. #
  22. # 2000.03.06    Original script
  23. #
  24. #
  25. # Options:
  26. #       -r      do reverse DNS lookups  (this can slow things down)
  27. #       -h      produce html output (hardwired)
  28. #       -w      include links to do whois queries on IP addresses
  29. #                       (implies -h)
  30. use Getopt::Std;
  31. use Socket;
  32. if($ARGV[0] eq undef)
  33. {
  34.    print STDERR "USAGE: snort-sort <filename>n";
  35.    exit;
  36. }
  37. getopts('rhw');
  38. $opt_h = 1;
  39. if($opt_w) {
  40.   $opt_h = 1;
  41. }
  42. # set the whois query href
  43. $whois_href = "http://www.arin.net/cgi-bin/whois.pl?queryinput=";
  44. open(INFILE,"< $ARGV[0]") || die "Unable to open file $ARGV[0]n";
  45. if($opt_h) {
  46.   print "<html>n";
  47.   print "<head>n";
  48.   print "<title>Sorted Snort Alerts</title>n";
  49.   print "</head>n";
  50.   print "<body>n";
  51.   print "<h1>Sorted Snort Alerts</h1><hr>n";
  52. } else {
  53.   #plain old text output goes here
  54. }
  55. while(<INFILE>) {
  56.   chomp();
  57.   # if the line is blank, go to the next one
  58.   if ( $_ eq "" )  { next }
  59.   # is this line an alert message
  60.   unless ( $_ =~ /^[**]/ ) { 
  61.     print STDERR "Warning, file may be corrupt.n";
  62.     next 
  63.   }
  64.   $a = <INFILE>;
  65.   chomp($a);
  66.   unless ( $a eq "" ) {
  67.     # strip off the [**] from either end.
  68.     s/(s)*[**](s)*//g;
  69.     push @{ $alerts{$_} }, $a;
  70.   } else {
  71.     print STDERR "Warning, file may be incompleten";
  72.   }
  73. }
  74. close(LOG);
  75. if($opt_h) {
  76.   # print out the relative html links to each entry
  77.   foreach $key (keys (%alerts)) {
  78.     $anchor = $key;
  79.     $anchor =~ s/ /_/g;
  80.     print "<a href=#$anchor>$key</a><br>n";
  81.   }
  82. }
  83. foreach $key (keys (%alerts)) {
  84.   $anchor = $key;
  85.   $anchor =~ s/ /_/g;
  86.   if($opt_h) {
  87.     print "<hr>n";
  88.     print "<h3><a name=$anchor>$key</a></h3>n";
  89.     print "<ul>n";
  90.   } else {
  91.     #plain text output goes here
  92.   }
  93.   @list = @{$alerts{$key}};
  94.   $size = @list;
  95.   for ( $i = 0 ; $i < $size ; $i++ ) {
  96.     $a = $list[$i];
  97.     ($datentime,$src,$arrow,$dest) = split(' ',"$list[$i]");
  98.     ($saddr,$sport) = split(/:/,"$src");
  99.     ($daddr,$dport) = split(/:/,"$dest");
  100.     # reverse DNS lookups
  101.     if($opt_r) {
  102.       $shost = resolve($saddr);
  103.       $dhost = resolve($daddr);
  104.     } else { 
  105.       $shost = $saddr;
  106.       $dhost = $daddr;
  107.     }
  108.     if($opt_w) {
  109.       # if saddr did not resolve (or we did not try to resolve it)
  110.       if(($shost eq $saddr)) {
  111.         $shost = "<a href=$whois_href$saddr>$saddr</a>";
  112.       }
  113.       # same thing for daddr
  114.       if(($dhost eq $daddr)) {
  115.         $dhost = "<a href=$whois_href$daddr>$daddr</a>";
  116.       }
  117.     }
  118.     if($opt_h) {
  119.       print "<li>$datentime $shost:$sport $arrow $dhost:$dport</li>n";
  120.     } else {
  121.       #plain text output goes here
  122.     }
  123.   }
  124.   if($opt_h) {
  125.     print "</ul>n";
  126.   } else {
  127.     #plain text output goes here
  128.   }
  129. }
  130. if($opt_h) {
  131.   print "</body></html>n";
  132. } else {
  133.   #plain text output goes here
  134. }
  135. #
  136. # the following code was taken from snort_stat.pl
  137. #
  138. # resolve host name and cache it
  139. # contributed by: Angelos Karageorgiou, <angelos@stocktrade.gr>
  140. # edited by: $Author: roesch $
  141. #
  142. sub resolve {
  143.   local $mname, $miaddr, $mhost = shift;
  144.   $miaddr = inet_aton($mhost);
  145.   # print "$mhostn";
  146.   if (!$HOSTS{$mhost}) {
  147.     $mname = gethostbyaddr($miaddr, AF_INET);
  148.     if ($mname =~ /^$/) {
  149.       $mname = $mhost;
  150.     }
  151.     $HOSTS{$mhost} = $mname;
  152.   }
  153.   return $HOSTS{$mhost};
  154. }