检查 IP 地址范围以查看主机是否处于活动状态

检查 IP 地址范围以查看主机是否处于活动状态

我需要编写一个 bash shell 脚本来检查一系列 IP 地址,以查看主机在该地址是否“活动”。我还需要列出那些“活动”的 IP 编号,并提供显示的摘要“活动”和“不活动”IP 地址的数量。地址范围将全部位于“C 类”网络中。我在弄清楚如何传递每个参数并使其对范围内的每个单独地址执行 ping 操作时遇到问题。

下面是我打算创建的脚本的示例运行。

$ programName 192.168.42 18 22 

Checking: 192.168.42.18 19 20 21 22 

Live hosts: 
 192.168.42.21 
 192.168.42.22 

There were: 
 2 alive hosts 
 3 not alive hosts 
 found through the use of 'ping'.

答案1

这应该可以帮助您开始。

#!/bin/bash
for i in `seq ${2} ${3}`
do
    ping -c 1 ${1}.${i} > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "${1}.${i} responded."
    else
        echo "${1}.${i} did not respond."
    fi
done

示例输出:

xxxx@xxxxxx:~$ bash test.sh 10.140.0 100 103
10.140.0.100 responded.
10.140.0.101 did not respond.
10.140.0.102 did not respond.
10.140.0.103 did not respond.

bash手册也许可以处理您需要的任何其他事情。

答案2

使用地图。这是完成这项工作的标准工具。

由于您只想知道哪些主机在线(并响应),请运行“ping 扫描” nmap -sP

如果您不关心输出的格式,您的脚本可以这样编写:

#!/bin/sh
nmap -sP "$1.$2-$3"

相关内容