写个小shell脚本检测IP列表里面哪些IP可以ping通

本文介绍了一个简单的Shell脚本,通过读取IPList文件中的每一行IP地址,使用ping命令检查网络可达性。对于每个IP,如果能ping通,则输出'yes',否则输出'no'。脚本结果显示了哪些IP地址是可以成功ping通的,哪些是无法连接的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cat IPList | while read line
do
if  ping -c 1 $line >/dev/null 2>&1 ; then
        echo "$line yes" 
else   
        echo "$line no!"
fi    
done
 

输出:

172.2.56.90 yes
172.2.56.91 no!
172.2.56.92 yes
172.2.56.93 yes
172.2.56.94 no!
172.2.56.95 yes
172.2.56.96 yes
172.2.56.97 no!
 

注:IPList是IP列表,每行一个

借鉴了:shell 中ping并且返回检测 - 简书

<think>好的,用户需要编一个Shell脚本来批量测试多个IP地址的连性,包括telnet和ping。我需要结合提供的引用内容,特别是引用[2]和[3]中的方法,同时确保满足用户的所有需求。 首先,用户提到的两个测试方法:telnet和ping。根据引用[3],ping使用ICMP协议检查主机是否在线,而telnet测试特定端口是否开放。因此脚本需要同时执行这两种测试。 接下来,输入文件格式。用户可能有一个包含IP和端口的列表,比如每行是IP和端口号,类似引用[2]中的ip_port_list.txt。但用户也可能需要处理仅包含IP的情况,所以需要判断每行的字段数。如果只有IP,可能只需要ping测试,或者用户希望指定默认端口? 然后,关于telnet的实现,引用[1]和[2]提供了两种方法。引用[1]使用timeout和telnet命令,而引用[2]使用更高效的/dev/tcp方法。后者不需要实际启动telnet客户端,速度更快,因此优先采用这种方法。 还需要考虑超时时间,比如设置5秒,避免长时间等待。同时,输出结果需要清晰区分和不的情况,方便用户查看。 另外,脚本需要处理文件读取,逐行解析IP和端口。对于每行,可能有两种情况:只有IP,或者IP加端口。例如,如果某行有三个字段,可能需要报错,或者用户可能希望每行严格两个字段(IP和端口)。需要明确如何处理这些情况。 可能的步骤: 1. 检查输入文件是否存在,并给出提示。 2. 逐行读取文件,分割成IP和端口。 3. 对每个IP执行ping测试。 4. 如果有端口,执行telnet测试(使用/dev/tcp方法)。 5. 输出结果,包括成功和失败的信息。 需要处理错误情况,比如文件无法读取,或行格式不正确。例如,如果某行没有端口,可能只进行ping测试,或者用户希望必须同时测试端口,这时需要报错。 另外,权限问题:使用/dev/tcp不需要特殊权限,但ping命令可能需要执行权限,或者用户需要有网络访问权限。 最后,测试脚本,确保其在不同情况下的正确性,比如IP可达但端口关闭,或者不可达等情况。 总结,脚本需要: - 读取文件,每行包含IP和端口(可选)。 - 对每个IP执行ping测试。 - 如果存在端口,执行telnet测试。 - 输出综合结果。</think>以下是结合需求编Shell脚本实现,整合了ping测试和telnet端口检测功能: ```bash #!/bin/bash # 文件名:network_test.sh # 功能:批量测试IPping性和telnet端口状态 # 输入文件格式(每行:IP 端口): # 示例: # 192.168.1.1 80 # 10.0.0.2 echo "网络连性测试开始..." echo "--------------------------" # 检查文件是否存在 if [ ! -f "ip_list.txt" ]; then echo "错误:ip_list.txt文件不存在" echo "请创建文件,格式:IP地址 [端口](每行一个)" exit 1 fi # 设置超时时间(秒) timeout=3 # 逐行处理文件 while IFS= read -r line do # 提取IP和端口 ip=$(echo "$line" | awk '{print $1}') port=$(echo "$line" | awk '{print $2}') # 基础校验 if [[ -z "$ip" ]]; then echo "错误:无效的空行" continue fi echo "测试目标: $ip${port:+ 端口:$port}" # 执行ping测试 if ping -c 1 -W $timeout "$ip" &> /dev/null; then echo " Ping结果: 成功" ping_success=true else echo " Ping结果: 失败" ping_success=false fi # 执行telnet测试(当端口存在时) if [[ -n "$port" ]]; then if (echo > /dev/tcp/"$ip"/"$port") &> /dev/null; then echo " Telnet结果: 端口$port开放" else echo " Telnet结果: 端口$port关闭" fi fi echo "--------------------------" done < "ip_list.txt" echo "测试完成,请查看以上结果" ``` §§使用说明§§ 1. 创建`ip_list.txt`文件,格式为每行`IP地址 [端口]`(端口可选) ```text # 示例: 192.168.1.1 80 8.8.8.8 10.0.0.3 22 ``` 2. 赋予执行权限 ```bash chmod +x network_test.sh ``` 3. 执行脚本 ```bash ./network_test.sh ``` §§ 1. 双协议检测:同时支持ICMP ping测试(验证主机可达性)[^3]和TCP端口检测(验证服务可用性)[^2] 2. 超时控制:设置3秒超时防止长时间等待 3. 智能解析:自动识别带端口和不带端口的输入行 4. 结果可视化:清晰标注不同测试结果,失败项用明显标记 §§执行结果示例§§ ```text 测试目标: 192.168.1.1 端口:80 Ping结果: 成功 Telnet结果: 端口80开放 -------------------------- 测试目标: 8.8.8.8 Ping结果: 成功 -------------------------- 测试目标: 10.0.0.3 端口:22 Ping结果: 失败 Telnet结果: 端口22关闭 -------------------------- ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值