1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-09 22:21:29 +00:00
Files
nmap/scripts/serviceprintsunwrap.pl
2005-04-11 22:34:19 +00:00

62 lines
1.3 KiB
Perl
Executable File

#!/usr/bin/perl -w
# For now, this script just un-wordwraps all the service fingerprints
# found in a file (or set of files) and prints them out. It also adds
# an IP element if it obtains that info from the Nmap log file.
sub osprep($) {
my $ln = shift;
chomp ($ln);
$ln =~ s/^\s+//;
$ln =~ s/\s+$//;
return $ln;
}
sub finalfpprep($) {
my $ln = shift;
$ln =~ s/\\x20/ /g;
return $ln;
}
my $infp = 0;
my $lineno = 0;
my $currentfp = "";
my $nextline;
my $lastip = "";
while(<>) {
$nextline = $_;
$lineno++;
if ($infp) {
if (!($nextline =~ /^ [^ ]+$/)) {
# Yay, just finished reading in an FP
print finalfpprep($currentfp) . "\n";
$infp = 0;
$currentfp = "";
} else {
$nextline = osprep($nextline);
$currentfp .= $nextline;
if (length($currentfp) > 10000) {
die "Fingerprint too long on line $lineno of input file(s)";
}
}
}
if ($nextline =~ /^Interesting ports on.*\D(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/) {
$lastip = $1;
}
if ($nextline =~ /^\s*SF-Port\d+-...:/) {
$nextline = osprep($nextline);
if ($lastip) {
$nextline =~ s/(SF-Port\d+-...:)/$1TIP=$lastip%/;
}
$currentfp .= $nextline;
$infp = 1;
}
}
if ($infp and $currentfp) {
print finalfpprep($currentfp) . "\n";
}