您的位置:首页 > 运维架构 > Shell

BASH SHELL下两个用于检查端口情况的脚本

2016-04-27 16:18 471 查看
这几天需要做Linux的TCP端口检查脚本,发现netstat、nc命令虽好,但不够直观,而且端口多了检查起来有点麻烦,动手学做了两个脚本。一个是用参数形式检查端口情况,另一个使用配置文件扫描端口。记录下来方便以后使用。

一、nc_check.sh
#!/bin/bash
cat ./check_port|while read line
do
nc -z `uname -n` $line >/dev/null 2>&1
if [ $? -eq 0 ];then
echo "$line OK."
else
echo "$line Failed."
fi
done


使用前在当前目录下建立一个check_port的文件,内容为:
cat check_port
123
345
456


所有TCP检测端口按照每行一个记录到文件内。执行效果:
[root@ABC ~]#. nc_check
123 OK
345 OK
456 Failed
程序把列表内所有端口检查一遍,成功的OK,失败的Failed

二、netstat_check.sh
#!/bin/bash
declare -a CHK_TCP_CMD=`netstat -tln|egrep 0.0.0.0|awk '{print $4}'|awk -F: '{print $2}'|sort -n`
declare -a PORT_NO_EXISTS
declare -i CURRENT_PORT=0
for TCP_PORT in $@
do
#IS NUMBER
expr "$TCP_PORT" + 0 >/dev/null 2>&1
if [ "$?" != "0" ];then
echo "$TCP_PORT not a number."
exit 1
fi
PORT_NO_EXISTS[$CURRENT_PORT]=$TCP_PORT
for LSN_PORT in $CHK_TCP_CMD
do
if [ $TCP_PORT == $LSN_PORT ];then
unset PORT_NO_EXISTS[$CURRENT_PORT]
break
fi
done
((CURRENT_PORT++))
done
if [ ${#PORT_NO_EXISTS[@]} -gt 0 ];then
echo "TCP ports ${PORT_NO_EXISTS[@]} failed."
exit 1
fi
exit 0


使用时直接在脚本后添加端口号作为参数,若扫描多个端口号,则每个端口号以空格隔开。若其中一个参数非数字,则程序终止。执行效果:
[root@ABC ~]#./netstat_check.sh 789
扫描到的端口无输出。
[root@ABC ~]#./netstat_check.sh 123 456 789
TCP port 123 456 failed.
程序把所有失败的端口罗列出来。
[root@ABC ~]#./netstat_check.sh 123 hello 456
hello not a number.
不是数字的程序输出错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bash 端口检测