[工具] Shell 批量检测服务器 TCP 端口的联通状态(nc 版)

#!/bin/bash
#作者:朱明宇
#名称:批量检测服务器 TCP 端口的联通状态
#作用:批量检测服务器 TCP 端口的联通状态

#使用方法:
#1. 端口清单 $portlist 每一个端口占用一行,格式为:<要联通端口号对应的 IP 地址>:<要联通的端口号>:<端口功能>
#2. 在此脚本的分割线内写入相应的内容,并和此脚本放在同一目录下
#3. 给此脚本增加执行权限
#4. 执行此脚本,并将要测试的服务器 IP 地址跟在脚本的后面,例:. <脚本名> <服务器 IP 地址 1> <服务器 IP 地址 2> ......

#注意:
#1. 此脚本执行前必须要先保证能无秘钥远程这些远程服务器
#2. 执行此脚本前确保 nc 命令已经安装

#######################我是分割线:两条分割线里的内容需要使用者自己配置########################

portlist=tcp_ports.txt #存放要测试的 TCP 端口的文件

#######################我是分割线:两条分割线里的内容需要使用者自己配置########################

for hosts in $*

do

echo $hosts

ssh $hosts "which nc" &> /dev/null
if [ $? -ne 0 ];then
echo -e "\033[31m$hosts can not use nc !!!!!!!!!!\033[0m"
continue
fi

for line in `cat $portlist`

do
ips=`echo $line | awk -F':' '{print $1}'`
ports=`echo $line | awk -F':' '{print $2}'`
remarks=`echo $line | awk -F':' '{print $3}'`

ssh $hosts "nc -z -w 3 $ips $ports"

if [ $? -ne 0 ];then
echo -e "\033[31m$ips $ports $remarks can not be connected !!!!!!!!!!\033[0m"
else
echo -e "\033[32m$ips $ports $remarks can be connected\033[0m"
fi

done

done