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 秒!"

posted @ 2024-11-28 16:19  被时光移动的城市  阅读(14)  评论(0编辑  收藏  举报