解释:
我需要一个脚本或程序来发现网络上的设备。我在想也许可以进行扫描,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