/[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 311 - (hide annotations)
Thu Aug 27 17:44:03 2009 UTC (14 years, 8 months ago) by dpavlin
File size: 946 byte(s)
added nmap scanning and discovery of network
1 dpavlin 311 package nmap;
2    
3     use warnings;
4     use strict;
5    
6     use XML::Simple;
7     use Data::Dump qw/dump/;
8    
9     use client;
10    
11     sub scan {
12     my $what = shift;
13    
14     my $path = $what;
15     $path =~ s{[^\w\d\.]+}{_}g;
16    
17     warn "# scan $what";
18    
19     system("nmap -O -oX /tmp/$path $what") == 0 || return;
20    
21     my $nmap = XMLin(
22     "/tmp/$path",
23     KeyAttr => { address => 'addrtype' },
24     ForceArray => [ 'host', 'osmatch', 'port' ],
25     );
26    
27     my $count = 0;
28    
29     foreach my $host ( @{ $nmap->{host} } ) {
30    
31     warn dump( $host );
32    
33     my $ip = $host->{address}->{ipv4}->{addr} || die "ipv4";
34     my $mac = $host->{address}->{mac}->{addr} || die "mac";
35    
36     print "$ip\t$mac\n";
37    
38     client::save_ip_mac( $ip, $mac );
39     if ( my $os = $host->{os}->{osmatch}->[0]->{name} ) {
40     client::conf( $ip, 'os' => $os );
41     }
42    
43     my @ports = map { $_->{portid} } @{ $host->{ports}->{port} };
44     client::conf( $ip, 'ports' => join("\n", @ports) ) if @ports;
45    
46     $count++;
47     }
48    
49     warn "# finish $count hosts";
50    
51     return $count;
52     }
53    
54     1;

  ViewVC Help
Powered by ViewVC 1.1.26