# $Id: Parser.pm 134 2009-10-16 18:21:38Z jabra $
package Sslscan::Parser;
{
our $VERSION = '0.02';
$VERSION = eval $VERSION;
use Object::InsideOut;
use Sslscan::Parser::Session;
my @session : Field : Arg(session) : Get(session) :
Type(Sslscan::Parser::Session);
# parse_file
#
# Input:
# argument - self obj -
# argument - xml scalar
#
# Ouptut:
#
sub parse_file {
my ( $self, $file ) = @_;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($file);
return Sslscan::Parser->new(
session => Sslscan::Parser::Session->parse( $parser, $doc ) );
}
sub parse_scan {
my ( $self, $args, @ips ) = @_;
my $FH;
use File::Temp ();
my $TEMP_FH = File::Temp->new();
my $temp_fname = $TEMP_FH->filename;
if ( $args =~ /-output/ ) {
die
"[Sslscan-Parser] Cannot pass option '-output ' to parse_scan()";
}
elsif ( $args =~ /--xml/ ) {
die
"[Sslscan-Parser] Cannot pass option '--xml ' to parse_scan()";
}
else { }
my $cmd
= "sslscan --xml=\"$temp_fname\" "
. ( join ', ', @ips )
. " &> /dev/null";
print "$cmd\n";
system("$cmd");
open $FH, "$temp_fname"
|| die "[Sslscan-Parser] Could not perform Sslscan scan - $!";
my $p = XML::LibXML->new();
my $doc = $p->parse_fh($FH);
my $parser = Sslscan::Parser->new(
session => Sslscan::Parser::Session->parse( $p, $doc ) );
close $FH;
close $TEMP_FH;
return $parser;
}
sub get_session {
my ($self) = @_;
return $self->session;
}
sub get_host {
my ( $self, $ip ) = @_;
return $self->session->scandetails->get_host_ip($ip);
}
sub get_all_hosts {
my ($self) = @_;
my @all_hosts = $self->session->scandetails->all_hosts();
return @all_hosts;
}
sub get_port {
my ( $self, $port ) = @_;
return $self->session->scandetails->get_port($port);
}
}
1;