2009-10-04 55 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