perl#!/usr/bin/perl -w
use XML::Simple;
use Net::MySQL;
system("nmap -n -p 5666 10.1.1.0/23 10.1.3.0/24 -oX output.xml");
my $text = XMLin("output.xml");
my $i = 0;
while ( $text->{host}->[$i] ) {
my $nrpe = $text->{host}->[$i]->{ports}->{port}->{state}->{state};
#因为在扫描到本机的时候,是没有mac的,所以到本机时不是ARRAY而是HASH
my $ip = ref($text->{host}->[$i]->{address}) eq 'ARRAY' ? $text->{host}->[$i]->{address}->[0]->{addr} : $text->{host}->[$i]->{address}->{addr};
my $mac = ref($text->{host}->[$i]->{address}) eq 'ARRAY' ? $text->{host}->[$i]->{address}->[1]->{addr} : '00:1E:C9:E6:E1:7C';
&mysql_query($ip, $mac, $nrpe);
$i++;
}
sub mysql_query {
my ($ip, $mac, $nrpe) = @_;
my $mysql = Net::MySQL->new( hostname => '10.1.1.25',
database => 'myops',
user => 'myops',
password => 'myops',
);
$mysql->query(
"insert into myhost (intranet, mac, monitorstatus) values ('$ip', '$mac', '$nrpe')"
);
}
小脚本一个,扫描内网网段内存活的机器,获取其MAC地址,以及nrpe端口情况。后期再配合myhost里的system,如果是linux(其实用nmap -O也可以获取system,但是结果不准,耗时还特别长,200台机器花10分钟),但monitorstatus还是closed的,就expect上去安装nrpe,嗯~~