1#!/usr/bin/perl 2use strict; 3use warnings; 4 5use FindBin qw($Bin); 6 7my $target = shift || die("You must specify target IP address\n"); 8my $port = shift || die("You must specify target open TCP port\n"); 9 10use Net::SinFP; 11use Net::SinFP::DB; 12use Net::Packet::Target; 13use Net::Packet::Env qw($Env); 14 15$Env->updateDevInfo($target); 16 17my $db = Net::SinFP::DB->new(db => "$Bin/../bin/sinfp.db"); 18$db->loadSignatures; 19 20my $sinfp = Net::SinFP->new( 21 db => $db, 22 h2Match => 1, 23 doP1 => 1, 24 doP2 => 1, 25 doP3 => 1, 26 target => Net::Packet::Target->new( 27 ip => $target, 28 port => $port, 29 ), 30); 31 32$sinfp->start; 33$sinfp->analyzeResponses; 34$sinfp->matchOsfps; 35 36if ($sinfp->resultList) { 37 my $buf = ''; 38 my %os; 39 for ($sinfp->resultList) { 40 $os{$_->os.':'.$_->osVersion} = $_; 41 } 42 for (sort keys %os) { 43 $buf .= $os{$_}->os.': '.$os{$_}->osVersion. 44 ' ('.$os{$_}->matchMask.'/'.$os{$_}->matchType.')'; 45 $buf .= "\n"; 46 } 47 $buf ? print $buf : print "sinfp error\n"; 48} 49else { 50 print "Unknown operating system\n"; 51} 52 53$sinfp->clean; 54