Craig Hammer wrote:
> 
> Take a look at this script.  I created it to read my firewall log files, and
> then give me a sort and count per unique address.  You could substitute a
> more traditional grep in place of the substitution I use.
> 
> 
> opendir(DIR, "/clog1") || die("Unable to open logdir: $!");
> @dirlist = readdir(DIR);
> closedir(DIR) || die("Unable to close logdir");
> 
> open(OUTFILE, ">/home/chammer/scan_rpt") || die("Unable to open outfile: $!");
       ^^^^^^^
You never output anything to this file handle.


> for $ent ( @dirlist ) {
> 
>     if ( $ent =~ /fw/ ) {
>         open(LOGFILE, "</clog1/$ent") || die("Unable to open log for read access: 
>$!");
>         while ( <LOGFILE> ) {
>             chomp ;
>             if ( $_ =~ /Deny inbound.*outside/ ) {
>                 $_ =~ s/^.*src outside:([0-9.]+).*dst.*/\1/ ;
>             }
>             elsif ( $_ =~ /IP packet/ ) {
>                 $_ =~ s/^.*from ([0-9.]+) to.*/\1/ ;
>             }
>             else {
>                 next ;
>             }
>             if ( exists ( $iphash{$_} ) ) {
>                 $iphash{$_}{count} ++ ;
>             } else {
>                 $iphash{$_}{count} = 1 ;
>             }
>         }
>             close(LOGFILE) || die("Unable to close log: $!");
>     }
>     else {
>         next ;
>     }
> }
> 
> while ( keys ( %iphash ) > 0 ) {
> $hc = 0 ;
>       while (($k,$v) = each ( %iphash )) {
>             if ( $v->{count} > $hc ) {
>                $hc = $v->{count} ;
>                $hi = $k ;
>             }
>       }
>       printf ( "%s - %s\n" , $hi , $iphash{$hi}{count} ) ;
>       delete ( $iphash{$hi} ) ;
> }
> 
> exit ;


You are doing _way too much_ work there.  :-)  This does the same thing:

#!/usr/bin/perl -w
use strict;

my $dir = '/clog1';
# $out not used?
# my $out = '/home/chammer/scan_rpt';

chdir $dir or die "Cannot chdir to $dir: $!";
opendir DIR, '.' or die "Unable to open $dir: $!";
# skip . and .. - only want files with 'fw' in the name
my @dirlist = grep !/^\.\.?$/ and /fw/, readdir DIR;
closedir DIR or die "Unable to close $dir: $!";

# $out not used?
# open OUTFILE, "> $out" or die "Unable to open $out: $!";

my %iphash;
for my $ent ( @dirlist ) {
    open LOGFILE, $ent or die "Unable to open $dir/$ent for read access:
$!";
    while ( <LOGFILE> ) {
        next unless /Deny inbound.*outside/ or /IP packet/;
        if ( /src outside:([\d.]+).*dst/ or /from ([\d.]+) to/ ) {
            $iphash{$1}++;
            }
        }
    }

for my $ip ( keys %iphash ) {
    print "$ip - $iphash{$ip}\n";
# should we print to $out?
#    print OUTFILE "$ip - $iphash{$ip}\n";
    }

__END__


John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to