/[pxelator]/lib/PXElator/nmap.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /lib/PXElator/nmap.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 349 - (hide annotations)
Sat Aug 29 20:41:17 2009 UTC (14 years, 8 months ago) by dpavlin
File size: 1236 byte(s)
added few local port names
1 dpavlin 311 package nmap;
2    
3     use warnings;
4     use strict;
5    
6     use XML::Simple;
7     use Data::Dump qw/dump/;
8 dpavlin 337 use CouchDB;
9 dpavlin 311
10     use client;
11    
12     sub scan {
13     my $what = shift;
14    
15     my $path = $what;
16     $path =~ s{[^\w\d\.]+}{_}g;
17 dpavlin 337 $path = "/tmp/nmap.$path";
18 dpavlin 311
19     warn "# scan $what";
20    
21 dpavlin 337 unlink $path if -f $path;
22 dpavlin 311
23 dpavlin 337 system("nmap -O -oX $path $what");
24    
25 dpavlin 311 my $nmap = XMLin(
26 dpavlin 337 "$path",
27 dpavlin 311 KeyAttr => { address => 'addrtype' },
28 dpavlin 337 ForceArray => [ 'host', 'address', 'osmatch', 'port' ],
29 dpavlin 311 );
30    
31 dpavlin 337 CouchDB::audit( $what, $nmap );
32    
33 dpavlin 311 my $count = 0;
34    
35 dpavlin 349 my $port_name = {
36     16992 => 'amt',
37     4445 => 'asterisk',
38     7777 => 'pxelator',
39     };
40    
41 dpavlin 337 while ( my $host = shift @{ $nmap->{host} } ) {
42 dpavlin 311
43 dpavlin 337 warn '# host ',dump( $host );
44 dpavlin 311
45     my $ip = $host->{address}->{ipv4}->{addr} || die "ipv4";
46    
47 dpavlin 337 if ( my $mac = $host->{address}->{mac}->{addr} ) {
48     print "$ip\t$mac\n";
49     client::save_ip_mac( $ip, $mac );
50     }
51 dpavlin 311
52     if ( my $os = $host->{os}->{osmatch}->[0]->{name} ) {
53     client::conf( $ip, 'os' => $os );
54     }
55    
56 dpavlin 349 my @ports = map { [ $_->{portid}, $_->{protocol}, $port_name->{$_->{portid}} || $_->{service}->{name} ] } @{ $host->{ports}->{port} };
57 dpavlin 337 client::conf( $ip, 'ports' => join("\n", map { join("\t", @$_) } @ports) ) if @ports;
58 dpavlin 311
59     $count++;
60     }
61    
62     warn "# finish $count hosts";
63    
64     return $count;
65     }
66    
67     1;

  ViewVC Help
Powered by ViewVC 1.1.26