1、端口检测

在Linux系统上测试端口是否通除了使用telnet外,还是可以使用nc命令,特别是在写维护脚本,由于telnet如果遇到端口不通,需要等待较长时间才能得到结果,而使用nc可以设置检测时长,同时可以一次性检测多个IP,可以大大提高检测的效率。

检测单个IP和端口示例:

#!/bin/bash

ip=192.168.1.1
port=22

nc -z -w 5 $ip $port > /dev/null 2>&1  ###-z表示只扫描端口,不发送数据,可以快速得到检测结果。-w表示检测时长现在,后面跟时长5秒,超过改值就认为不通。
if [ $? -eq 0 ]
then
echo telnet $ip $port ok
sleep 1
else
echo telnet $ip $port fail >&2
fi
exit 0

检测多个IP和端口示例:

#!/bin/bash
address=(192.168.1.1 192.168.1.2 192.168.1.3)  ###使用列表方式传递IP
port=(22 80 443)
for ip in ${address[*]}
 do
  for pr in ${port[*]}
   do
    nc -z -w 5 $ip $pr > /dev/null 2>&1
     if [ $? -eq 0 ]
      then
       echo telnet $ip $pr ok
      else
       echo telnet $ip $pr fail >&2
     fi
   done
 done
exit 0

如果IP很多,将IP信息放置在文本里,脚本从文本中读取

#!/bin/bash

port=22
cat ip.txt|while read line             ###IP存放在同级目录下的ip.txt,按行放置IP
do
nc -z -w 5 $line $port > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo telnet $line $port ok
sleep 1
else
echo telnet $line $port fail >&2
fi
done
exit 0

注:nc还可以直接在同一条命令行里写多个IP和端口进行检测,用法我没记住⊙﹏⊙b汗


2、临时启用端口

nc -l 8888    ####启用TCP端口,可以直接telnet通
在其他主机上使用nc测试
nc -v -w 1 192.168.1.1 -z 8888
结果
Connection to 192.168.1.1 8888 port [tcp/ddi-udp-1] succeeded!


nc -l -u 8888 ####启用UDP端口,无法telnet通,可以使用nc检测。-u表示使用UDP协议
nc -v -w 1 192.168.1.1 -u -z 8888
结果
Connection to 192.168.1.1 8888 port [udp/ddi-udp-1] succeeded!