z0mbi3

nmap2csv.pl the good version

Mar 22nd, 2021
2,685
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.97 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use Getopt::Std;
  4. use Nmap::Parser;
  5. use Date::Manip;
  6.  
  7. getopt("hi:o:");
  8.  
  9. $usage = "$0 -i input.xml -o output.csv";
  10.  
  11. if ($opt_h) {
  12.         print "$usage\n";
  13. };
  14.  
  15. if (!$opt_i || !$opt_o) {
  16.         print "$usage\n";
  17. } else {
  18.         my $np = new Nmap::Parser;
  19.         $np->parsefile("$opt_i");
  20.  
  21.         # Start writing to results to the outputfile
  22.         open (OUT,'>>'.$opt_o) || die "Could not open output file: $opt_o\n!";
  23.  
  24.         $si = $np->get_session();
  25.  
  26.         print   OUT "############\nNmap Version: ".$si->nmap_version()."\n",
  27.                 'Command Line: '.$si->scan_args()."\n";
  28.         print OUT "Scan Date: ". $si->start_str()."\n";
  29.         print OUT 'Total Time: '.($si->finish_time() - $si->start_time())." seconds\n##########\n";
  30.        
  31.         print OUT "addr;hostname;status;tcp open;udp open;extraports;extraportsstate;osmatch\n";
  32.         for my $host ($np->all_hosts()) {
  33.             my $tcp_ports = 0;
  34.             my $udp_ports = 0;
  35.             for my $port ($host->tcp_ports()) { $tcp_ports++ }
  36.             for my $port ($host->udp_ports()) { $udp_ports++ }
  37.             print OUT $host->addr().';'.
  38.                 $host->hostname().';'.
  39.                 $host->status().';'.
  40.                 $tcp_ports.';'.
  41.                 $udp_ports.';'.
  42.                 $host->extraports_count().';'.
  43.                 $host->extraports_state().';'.
  44.                 $host->os_sig->name."\n";
  45.         }
  46.         print OUT "##########\n";
  47.        
  48.         print OUT "addr;hostname;portnum;state;proto;name;product;version;extrainfo;extraports (count);osmatch\n";
  49.         for my $host ($np->all_hosts()) {
  50.                 for my $port ($host->tcp_ports()) {
  51.                         $sv = $host->tcp_service($port);
  52.  
  53.                         my $product = '';
  54.                         my $version = '';              
  55.                         my $extra = '';
  56.                         my $osmatch = '';
  57.                         my $extraports = '';
  58.        
  59.                         $product = $sv->product(); $product =~ s/\;/\,/g;
  60.                         $version = $sv->version(); $version =~ s/\;/\,/g;
  61.                 $extra = $sv->extrainfo(); $extra =~ s/\;/\,/g;
  62.                 $osmatch = $host->os_sig->name; $osmatch =~ s/\;/\,/g;
  63.                         $extraports = $host->extraports_state . " (" . $host->extraports_count() . ')';
  64.  
  65.                         print OUT $host->ipv4_addr().';';
  66.                         print OUT $host->hostname().';';
  67.                         print OUT $port.';'.
  68.                         $host->tcp_port_state($port).';'.
  69.                         'tcp;'.
  70.                         $sv->name().';'.
  71.                         $product.';'.
  72.                         $version.';'.
  73.                         $extra.';'.
  74.                                 $extraports.';'.
  75.                         $osmatch."\n";
  76.                 }
  77.                 for my $port ($host->udp_ports()) {
  78.                         $sv = $host->udp_service($port);
  79.  
  80.                         my $product = '';
  81.                         my $version = '';              
  82.                         my $extra = '';
  83.                         my $osmatch = '';
  84.                         my $extraports = '';
  85.  
  86.        
  87.                         $product = $sv->product(); $product =~ s/\;/\,/g;
  88.                         $version = $sv->version(); $version =~ s/\;/\,/g;
  89.                 $extra = $sv->extrainfo(); $extra =~ s/\;/\,/g;
  90.                 $osmatch = $host->os_sig->name; $osmatch =~ s/\;/\,/g;
  91.                         $extraports = $host->extraports_state . " (" . $host->extraports_count() . ')';
  92.  
  93.                 print OUT $host->ipv4_addr().';';
  94.                         print OUT $host->hostname().';';
  95.                         print OUT $port.';'.
  96.                         $host->udp_port_state($port).';'.
  97.                         'udp;'.
  98.                         $sv->name().';'.
  99.                         $product.';'.
  100.                         $version.';'.
  101.                         $extra.';'.
  102.                                 $extraports.';'.
  103.                         $osmatch."\n";
  104.                 }
  105.         }
  106.  
  107. }
  108.  
Advertisement