2009-10-04 53 views

回答

8

无论您使用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; 
} 
+0

感谢您的示例代码...我开始看到我可能想要使用Nmap :: Scanner。如果我的发现过程需要增长,我可以看到如何使用异步和IPC(使用不同的发现机器进行解耦)更容易一些。一个网络是我可能试图发现的10 *。*。*或256^3 IP地址。 – EhevuTov 2009-10-05 04:16:19

1

好了,其中之一是一个猜测沿您已拥有数据的解析器,其中一个是创建数据的扫描器。使用做你需要的工作的人。哪部分任务导致了问题?

+0

我对模块的无知是什么导致了问题。 :-)我想使用Nmap来发现我的可发现设备,然后将网络元素插入到队列中。一旦完成,我希望使用SNMP,TL1等进行更严格的调查。谢谢! – EhevuTov 2009-10-05 04:11:51