【发布时间】:2010-12-03 16:36:27
【问题描述】:
我想以最快的方式审核我的大型网络的设备。我应该使用Nmap::Parser 还是Nmap::Scanner?
我想创建一个返回 ping 以及相关操作系统足迹和标识的 IP 地址列表。
示例:
ping 192.168.*.*
然后,当我成功 ping 时,将 IP 地址存储在哈希中,并猜测操作系统是什么
【问题讨论】:
标签: perl networking audit nmap
我想以最快的方式审核我的大型网络的设备。我应该使用Nmap::Parser 还是Nmap::Scanner?
我想创建一个返回 ping 以及相关操作系统足迹和标识的 IP 地址列表。
示例:
ping 192.168.*.*
然后,当我成功 ping 时,将 IP 地址存储在哈希中,并猜测操作系统是什么
【问题讨论】:
标签: perl networking audit nmap
无论你使用Nmap::Parser还是Nmap::Scanner,都必须用Nmap运行同样的扫描,所以两者没有速度差异。
这是一个使用Nmap::Scanner 的示例,它大致完成了您想要的操作,报告主机的状态并尝试在它们启动时对它们进行操作系统指纹识别,并将结果存储在哈希中。您应该能够根据需要对其进行扩展。
#!/usr/bin/perl
use strict;
use warnings;
use Nmap::Scanner;
my %network_status;
my $scanner = new Nmap::Scanner;
$scanner->register_scan_complete_event(\&scan_completed);
$scanner->guess_os();
$scanner->scan('-O 192.168.*.*');
foreach my $host ( keys %network_status ) {
print "$host => $network_status{$host}\n";
}
sub scan_completed {
my $self = shift;
my $host = shift;
my $hostname = $host->hostname();
my $addresses = join(',', map {$_->addr()} $host->addresses());
my $status = $host->status();
print "$hostname ($addresses) is $status ";
my $os_name = 'unknown OS';
if ( $status eq 'up' ) {
if ( $host->os() && $host->os()->osmatches() ) {
my ($os_type) = $host->os()->osmatches();
$os_name = $os_type->name();
}
print "($os_name)";
}
print "\n";
$network_status{$addresses} = $os_name;
}
【讨论】:
嗯,其中之一是您已经拥有的数据的解析器,其中之一是创建数据的扫描仪。使用可以完成您需要的工作的那个。任务的哪一部分导致了问题?
【讨论】: