我应该使用Nmap :: Parser或Nmap :: Scanner来审核网络吗?

时间:2009-10-04 05:04:56

标签: perl networking audit nmap

我想以最快的方式审核我的大型网络设备。我应该使用Nmap::Parser还是Nmap::Scanner

我想创建一个返回ping的IP地址列表,以及相关的OS足迹和标识。

示例

ping 192.168.*.*

然后,当我成功ping时,将IP地址存储在哈希中,同时猜测操作系统是什么

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

好吧,其中一个是你已经拥有的数据的解析器,其中一个是创建数据的扫描程序。使用完成所需工作的那个。任务的哪一部分导致问题?