微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

说明:

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

例:

脚本/程序运行后:

– 有两个主机

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

等等……你明白了.

PS:BTW,这些都不是真正的IP的例子.

概观

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

解决方法:

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

explore.pl 192.168.1.0/24

您需要将此脚本作为root if you want to display MAC addresses运行.

#!/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";
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐