Matt Richter wrote:
> 
> I'm trying to split a line from a PIX Firewall log file and put it into
> an array. The log entries look like:
> 
> Nov 13 07:28:55 10.0.0.3 %PIX-4-400025: IDS:2154 ICMP ping of death from
> 123.123.123.123 to 124.124.124.124 on interface outside
> 
> Here is the code i've tried:
> 
> [snip code]
> 
> Obviously, split(/  /, $line) doesn't produce the array I really want.
> Here is the format of the log entries to parse.
> 
> Month Day Time Host PIXcode IDSCode Protocol Description SourceHost To
> DestinationHost On Interface InterfaceName
> 
> Here are the string details:
> Month : Always Three Letters
> Day : May be One or Two Digits. If one Digit, it is preceded by and
> extra space. i.e. " 9"  or "10"
> Time: Always the same format
> Host : Sometimes IP number, Sometimes Hostname
> PIXCode : Always %PIX-4-4000xx:
> IDSCode : Always IDS:xxxx
> Protocol : If exists, followed by space, Sometimes not there at all
> Description : Various string lengths (2 To 6 words)
> SourceHost : Always an IP Number
> To : Always exists
> DestinationHost : Always an IP Number On
> Interface : Always exists
> InterfaceName : Always One Word


This should work according to the specs given:


while ( <LOG> ) {

    if ( /^                                      # Start of line
            (((\w{3})\s+\d+)\s+\d+) :\d+:\d+\s+  # Month, Day and Hour
            (\S+) \s+                            # Host
            (%PIX-4-4000\d+) :\s+                # PIXCode
            IDS:(\d+) \s*                        # IDSCode
            (TCP|UDP|ICMP|) \s+                  # Protocol (optional)
            (\S.*?\S) \s+                        # Description
            from\s+([\d.]+) \s+                  # Source Host
            to  \s+([\d.]+) \s+                  # Destination Host
            on\s+interface\s+(\S+)               # Interface Name
                $/x ) {                          # End of line

        $month{ $3 }++;               #
        $day{ $2 }++;  # Cat Month and Day
        $ltime{ $1 }++; # Cat Date and Time
        $host{ $4 }++;
        $pixcode{ $5 }++;
        # etcetera
        }
    }



John
-- 
use Perl;
program
fulfillment

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

Reply via email to