用于发现网络上主机的脚本或程序

用于发现网络上主机的脚本或程序

解释:

我需要一个脚本或程序来发现网络上的设备。我在想也许可以进行扫描,nmap并且我需要只显示设备的名称、它是什么,以及设备的 ip 地址/mac 地址。我想在后台进行扫描,并仅以我猜的列表形式显示所需的信息。

例子:

脚本/程序运行后:

-已有2位主机上线

  • 主机1:联想-PC | 192.168.1.86 | 0A:65:3F:2B:F1 |视窗
  • 主持人2:LG-3444 | 192.168.1.89 | A9:B2:C3:D4:E5 | LG电子

等等...你明白了。

PS:顺便说一句,这些是示例,不是真实的 IP。

概述

因此,我想扫描我的网络中的设备/主机,并显示列表中每个设备/主机的重要信息(使用 bash 脚本、Python 或任何可以实现此目的的东西)。

答案1

这是 perl 中的一个例子。代码nmap以 XML 输出格式运行,然后使用 Nmap::Parser 库解析输出。您需要提供网络掩码作为参数。因此,如果将此脚本保存到explore.pl文件中,则可以将其运行为

explore.pl 192.168.1.0/24

您需要运行此脚本root 如果你想显示 MAC 地址

#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use Nmap::Parser;

sub safeGet($){
  defined $_[0] ? $_[0] : "unknown";
}

my $nmOutput=`/usr/bin/nmap -oX - -A @ARGV`;

my $np = new Nmap::Parser;
$np->parse($nmOutput);

my $cnt=0;
for my $host ($np->all_hosts()){
  $cnt++;

  my $hostName = 'unknown';
  if(@{$host->{hostnames}} > 0){ # $host->hostname returns "0" when no hostname was found.
    $hostName = $host->hostname;
  }
  print "Host $cnt: $hostName|"
    . safeGet($host->addr) ."|"
    . safeGet($host->mac_addr)."|"
    . safeGet($host->os_sig->name)."\n";
}

答案2

这个怎么样:

nmap -sn 10.0.1.0/24 | grep report | cut -f5,6 -d' ' | \
    while read line
    do
        echo -n "$line "
        arp -an $(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') | cut -f4 -d' '
    done

相关内容