Linux下端口连通性测试
端口连通性测试
- 使用nc命令
- Linux下自带/dev/tcp命令
#!/bin/bash
#检测脚本传入的参数
if [ $# -eq 0 ]; then
echo "使用格式: $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=$1
command -v $comm_name > /dev/null
}
#NC 端口连接测试
nc_test_port(){
IP=$1
PORT=$2
nc -z -v -w 3 $IP $PORT &> /dev/null
if [ $? -eq 0 ]; then
echo -e "\e[32m $IP $PORT 端口测试可用\e[0m"
else
echo "$IP $PORT 端口测试不可用"
fi
}
#TELNET 端口连接测试 实际使用/dev/tcp
telnet_test_port(){
IP=$1
PORT=$2
#telnet $IP $PORT &> /dev/null
(echo > /dev/tcp/$IP/$PORT) &> /dev/null
if [ $? -eq 0 ]; then
echo -e "\e[32m $IP $PORT 端口测试可用\e[0m"
else
echo "$IP $PORT 端口测试不可用"
fi
}
#传入单个IP和端口形式
if [ "$1" != "-f" ]; then
check_command $NC
if [ $? -eq 0 ]; then
IFS=" " read -r IP PORT <<< "$1"
if [ -z "$IP" ] || [ -z "$PORT" ]; then
echo "格式不正确,例如:192.168.1.1 22"
exit 1
fi
nc_test_port $IP $PORT
else
echo "$NC 命令不存在,测试$TELNET命令"
check_command $TELNET
if [ $? -eq 0 ]; then
IFS=" " read -r IP PORT <<< "$1"
if [ -z $IP ] || [ -z $PORT ]; then
echo "格式不正确,例如:192.168.1.1 22"
exit 1
fi
telnet_test_port $IP $PORT
else
echo "$TELNET 命令不存在"
fi
fi
else
#判断文件是否存在
FILE=$2
if [ ! -f "$FILE" ]; then
echo "文件找不到,请重新指定!"
exit 1
fi
#处理文本,逐行读取并测试端口连通性
while IFS=" " read -r IP PORT;
do
if [ -n "$IP" ] && [ -n "$PORT" ]; then
check_command $NC
if [ $? -eq 0 ]; then
nc_test_port $IP $PORT
else
telnet_test_port $IP $PORT
fi
fi
done <"$FILE"
fi
#结束时间
end_time=$(date +%s)
use_time=$((end_time - start_time))
echo -e "\n执行共用时:$use_time 秒!"
Never try,never know