端口连通性测试
- 使用nc命令
- Linux下自带/dev/tcp命令
#!/bin/bash#检测脚本传入的参数
if [ $# -eq 0 ]; thenecho "使用格式: $0 <IP PORT> | -f <file>"echo " <IP PORT> 测试单个IP和端口"echo " -f <file> 批量测试,使用参数-f 指定要测试的文件,每行IP PORT以空格形式"exit 1
fi#记录脚本启动时间
start_time=$(date +%s)#变量
NC="nc"
TELNET="telnet"#判断命令nc telnet命令是否存在
check_command(){comm_name=$1command -v $comm_name > /dev/null
}#NC 端口连接测试
nc_test_port(){IP=$1PORT=$2nc -z -v -w 3 $IP $PORT &> /dev/nullif [ $? -eq 0 ]; thenecho -e "\e[32m $IP $PORT 端口测试可用\e[0m" elseecho "$IP $PORT 端口测试不可用"fi
}#TELNET 端口连接测试 实际使用/dev/tcp
telnet_test_port(){IP=$1PORT=$2#telnet $IP $PORT &> /dev/null(echo > /dev/tcp/$IP/$PORT) &> /dev/nullif [ $? -eq 0 ]; thenecho -e "\e[32m $IP $PORT 端口测试可用\e[0m" elseecho "$IP $PORT 端口测试不可用"fi}#传入单个IP和端口形式
if [ "$1" != "-f" ]; thencheck_command $NCif [ $? -eq 0 ]; thenIFS=" " read -r IP PORT <<< "$1"if [ -z "$IP" ] || [ -z "$PORT" ]; thenecho "格式不正确,例如:192.168.1.1 22"exit 1finc_test_port $IP $PORTelseecho "$NC 命令不存在,测试$TELNET命令"check_command $TELNETif [ $? -eq 0 ]; thenIFS=" " read -r IP PORT <<< "$1"if [ -z $IP ] || [ -z $PORT ]; thenecho "格式不正确,例如:192.168.1.1 22"exit 1fitelnet_test_port $IP $PORTelseecho "$TELNET 命令不存在"fifi
else#判断文件是否存在FILE=$2if [ ! -f "$FILE" ]; thenecho "文件找不到,请重新指定!"exit 1fi#处理文本,逐行读取并测试端口连通性while IFS=" " read -r IP PORT;doif [ -n "$IP" ] && [ -n "$PORT" ]; thencheck_command $NCif [ $? -eq 0 ]; thennc_test_port $IP $PORTelsetelnet_test_port $IP $PORTfifidone <"$FILE"fi#结束时间
end_time=$(date +%s)
use_time=$((end_time - start_time))echo -e "\n执行共用时:$use_time 秒!"