/[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

Contents of /lib/PXElator/nmap.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 311 - (show annotations)
Thu Aug 27 17:44:03 2009 UTC (14 years, 7 months ago) by dpavlin
File size: 946 byte(s)
added nmap scanning and discovery of network
1 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