Linux shell自动化检测 网络与端口 联通情况

编程入门 行业动态 更新时间:2024-10-08 06:28:08

Linux shell自动化检测 网络与<a href=https://www.elefans.com/category/jswz/34/1770903.html style=端口 联通情况"/>

Linux shell自动化检测 网络与端口 联通情况

背景:我们某个机房交换机需要替换,替换完成后,我们也需要校验主机和服务的连通性。以前只测某个主机时,测网络的话就ping一下,测端口的话就telnet一下。现在机器多起来,挨个敲命令就太麻烦了。花了一点时间写了一个通用脚本,现在分享一下。

分享脚本前先普及一下,脚本里核心的原理和方法

测试网络

测试网络,我们都会用ping,但是linux默认情况下ping会一直进行(windows是默认4次),所以查阅一下ping命令的参数(ping -h),可以发现用-c参数指定ping的次数。
另外ping命令执行后,执行$?会返回值0(成功),ping有异常时,继续执行$?会返回值>0(异常)。简单的代码如下:

HOST=8.8.8.8
ping -c 4 "$HOST"  ##这里设置4次,参考windows默认值
echo $?

测试端口

测试端口,我们一般都会用telnet,但是telnet貌似没有次数或时长的参数。我这里用的nc命令来测试。nc有个-t参数可以设置超时时长,-z参数是只用于扫描测试(我理解就是不会影响原服务),执行nc命令后,也用$?来检测结果是否有异常。简单代码如下:

HOST=8.8.8.8
PORT=8080
nc -w 10 -z $HOST $PORT ##-w设置超时时长10秒
echo $?

:nc版本较低的话,不支持-z参数。 用nc --version可以查看版本,我这边是7.50版本是肯定支持的。

自动化多IP,多端口测试脚本

好了,放大招了~~脚本注释直接写脚本里了,不影响执行哦
vi net_check.sh

#! /bin/bash
# 这一段代码实现:用户可以自己指定待扫描的列表文件,不指定的话,默认找同级目录的net.list文件。
ARGS_NUM=$#
if [ $ARGS_NUM -eq 0 ]; thenLIST="net.list"
elif [ $ARGS_NUM -eq 1 ]; thenLIST=$1[ ! -f $LIST ] && echo "File[$LIST] does not exists !" && exit 1
elseecho "Usage net_check.sh [net_list_file]" && exit 1
fi#这一段代码是实现通用日志打印,后面日志打印直接调用,不用辣么麻烦拼日期什么啦~~
#参考java的log4j,可能有的机器不支持printf命令
#如果对输出格式无所谓的话,用echo也一样的
#FUNCTION
log(){if [ $# -eq 2 ];thenprintf "%-5s `date '+%F %T'` $2\n" ${1^^}elseprintf "%-5s `date '+%F %T'` $*\n" INFOfi
}#这一段代码是实现测试网络的,原理见文章里
#FUNCTION
ping_check(){HOST=$1log "Ping check : $HOST"ping -c 4 "$HOST" > /dev/nullif [ $? -eq 0 ];thenlog "Ping $HOST successfully"elselog "ERROR" "Ping $HOST failed"fi
}#这一段代码是实现测试端口的,原理见文章里
#FUNCTION
port_check(){HOST=${1%%" "*}  ##根据空格,截取前者。也可以用awk等命令实现PORT=${1##*" "}  ##根据空格,截取后者。log "Port check : $HOST $PORT"nc -w 10 -z $HOST $PORT > /dev/nullif [ $? -eq 0 ];thenlog "Port $HOST $PORT successfully"elselog "ERROR" "Port $HOST $PORT failed"fi
}#真正的执行在这里啦~~
#MAIN
cat $LIST|grep -v "#"|while read line  #剔除带#注释的行
doNET=`echo ${line##" "}`  #ltrimNET=`echo ${NET%%" "}`   #rtrim[ -z "$NET" ] && continue  #ignore null lineNET_PARA_NUM=`echo "$NET"|awk -F[" "]+ '{print NF}'`  #判断有几个参数if [ $NET_PARA_NUM -eq 1 ]; thenping_check "$NET"elif [ $NET_PARA_NUM -eq 2 ]; thenport_check "$NET"elselog error "Please make sure your config\"$line\" with the format\"HOST [PORT]\"" fi
done

vi net.list

#test ping
8.8.8.8
10.1.1.1
#test port
10.1.1.1 21
10.1.1.1 21 80

测试结果展示:

INFO  2019-08-29 14:43:48 Ping check : 8.8.8.8
INFO  2019-08-29 14:43:51 Ping 8.8.8.8 successfully
INFO  2019-08-29 14:43:51 Port check : 10.1.1.1 21
ERROR 2019-08-29 14:43:51 Port 10.1.1.1 21 failed
ERROR 2019-08-29 14:43:51 Please make sure your config"10.1.1.1 21 80" with the format"HOST [PORT]"

更多推荐

Linux shell自动化检测 网络与端口 联通情况

本文发布于:2024-03-12 09:25:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1731201.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:端口   情况   网络   Linux   shell

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!