#!/usr/bin/perl
#
use Getopt::Std;

getopts("t:f:k:", \%args);

if(!defined $args{t} && !defined $args{f} && !defined $args{k})
{
        print << "EOT";

Nessus Session Data File Parser - g0ne
usage: $0 -t <xml|html|txt> -f <file> -k "keyword"
example: $0 -t txt -f 20010426-124153-data -k hole
         This would return a list of all holes found in the session.


EOT
exit;
}

@stuff = `egrep -i "$args{k}" $args{f}`;

if ($args{t} eq "xml")
{
        print "<?xml version='1.0'?>\n";
        print "<DOCUMENT>\n";
}

if ($args{t} eq "html")
{
        print "<HTML>\n";
        print "<BODY>\n";
        print "<CENTER>\n";
}

foreach(@stuff)
{
        chomp $_;
        $mush = $_;

        $mush =~ s/\<\|\>/\|/g;
        ($x, $type, $address, $prot, $alert, $x) = split('\|', $mush);
        $alert =~ s/\;/\n/g;

        if ($args{t} eq "txt")
        {
        print "\n";
        print "Host Type: $type\n";
        print "Host Address: $address\n";
        print "Protocol/Port: $prot\n";
        print "Description:\n$alert\n";
        print "%" . "-" x 40 . "\n";
        }

        if ($args{t} eq "xml")
        {
        print "<ALERT>\n";
        print "\t<HOST> $address </HOST>\n";
        print "\t<TYPE> $type </TYPE>\n";
        print "\t<PROT> $prot </PROT>\n";
        print "\t<DESC> $alert </DESC>\n";
        print "</ALERT>\n\n";
        }
        
        if ($args{t} eq "html")
        {
        print "<BR>\n";
        print "<TABLE BORDER>\n";
        print "<CAPTION ALIGN=TOP><B> Host: $address</B></CAPTION>\n";
        print "<TR>\n";
        print "<TH>Type</TH><TH>Protocol</TH><TH>Description</TH>\n";   
        print "</TR>\n";
        print "<TR>\n";
        print "<TD> $type </TD><TD> $prot </TD><TD> $alert </TD>\n";
        print "</TR>\n";
        print "</TABLE>\n";
        }

}

if ($args{t} eq "xml")
{
        print "</DOCUMENT>\n";
}

if ($args{t} eq "html")
{
        print "</CENTER>\n";
        print "</BODY>\n";
        print "</HTML>\n";
}

