Linux shell 批量验证端口连通性
脚本
#!/bin/bash
#
#database check
#set -o nounset
LOCALIP=`ifconfig | grep inet | head -1 | awk '{print $2}' | sed 's/addr\://'`
IPLIST='192.168.1.99 192.168.1.98 192.168.1.97'
PORTLIST='81 82 83 84 85 86'
check_nc(){
for CHECK_IP in $IPLIST
do
for CHECK_PORT in $PORTLIST
do
nc -nz -w 1 $CHECK_IP $CHECK_PORT
if [ $? -eq 0 ];then
echo "$LOCALIP result $CHECK_IP $CHECK_PORT 连通"
else
echo "$LOCALIP result $CHECK_IP $CHECK_PORT 不连通"
fi
done
done
}
check_nc_7(){
for CHECK_IP in $IPLIST
do
for CHECK_PORT in $PORTLIST
do
nc -n -w 1 $CHECK_IP $CHECK_PORT < /dev/null
if [ $? -eq 0 ];then
echo "$LOCALIP result $CHECK_IP $CHECK_PORT 连通"
else
echo "$LOCALIP result $CHECK_IP $CHECK_PORT 不连通"
fi
done
done
}
check_telnet(){
for CHECK_IP in $IPLIST
do
for CHECK_PORT in $PORTLIST
do
echo -e "\n"| telnet $CHECK_IP $CHECK_PORT | grep Connected if [ $? -eq 0 ];then
echo "$LOCALIP result $CHECK_IP $CHECK_PORT 不连通"
else
echo "$LOCALIP result $CHECK_IP $CHECK_PORT 连通"
fi
done
done
}
echo "--------------------------------------"
echo "execution time : `date`"
echo "--------------------------------------"
echo "Home ip : $LOCALIP"
echo "--------------------------------------"
which nc > /dev/null
if [ $? -eq 0 ];then
echo "------------------nc------------------"
echo "--------------------------------------"
cat /etc/redhat-release |grep 'release 7' > /dev/null
if [ $? -eq 0 ];then
check_nc_7
else
check_nc
fi
else
which telnet > /dev/null
if [ $? -eq 0 ];then
echo "-----------------telnet----------------"
check_telnet
fi
fi
此脚本考虑了nc及telnet命令,及nc在redhat 7中应用的不同。可以直接复制使用,只要修改一下IP和端口。
telnet 命令语法
telnet [主机名或IP地址] [端口号]
nc 命令语法
nc [选项] [目标IP] [端口号]
常用选项包括:
-l
:监听模式,在目标IP上开启一个监听服务器。-p
:指定要使用的本地端口。-e
:将输入和输出重定向到程序。-n
:不解析主机名和端口号。-v
:显示详细的调试信息。-z
:使用零I/O模式,只扫描监听端口是否开放,不发送任何数据。-u
:使用UDP协议进行通信。-w
:设置超时时间。
常见用法包括:
-
监听一个端口:
nc -l 监听端口
功能:将目标IP上指定端口设为监听状态,等待连接。
-
端口扫描:
nc -zv 目标IP 起始端口-结束端口
功能:扫描目标IP上某个范围的端口,查看哪些端口处于开放状态。
-
发送和接收数据:
nc 目标IP 目标端口
功能:与目标IP上的指定端口进行TCP连接,并通过标准输入输出发送和接收数据。
-
将文件发送给远程主机:
nc 目标IP 目标端口 < 文件名
功能:将本地文件发送给目标IP上的指定端口。
评价
很好用,如果是国产机可能需要注释掉两行 which 语句