检测服务器上哪些端口可用

萧墙

由于倒霉的运维防火墙策略,只有部分端口可用,然而不同IDC的端口可用范围还特么 不!一!样!所以写了两个bash函数来检查哪些端口可用……

红杏

check_avail_ports_server ()
{
 for ((i=$2 ; i <= $3 ; i += $4)) ; do
  bash -c "timeout 10 nc -l $i >> $1 & ";
 done ;
}

check_avail_ports_client ()
{
 for ((i=$2 ; i <= $3 ; i += $4)) ; do
  bash -c "echo $i | nc $1 $i -G 1 &" ;
 done;
}

姿势

把以上代码加入到bashrc里或者直接在bash中输入之。

被测端

在要被检测的服务器端运行:

check_avail_ports_server avail_ports 1000 65535 10

参数

  1. output_file: 将可用端口保存到文件,例如:avail_ports
  2. start_port: 起始端口号,例如:1000
  3. end_port: 结束端口号 ,例如:65535
  4. port_interval: 端口号间隔,每隔 port_step 个端口做检查,例如:10

检测端

在发起检测的客户端运行:

check_avail_ports_client 10.123.12.1 1000 65535 10

参数

  1. remote_ip: ,例如:10.123.12.1
  2. start_port: 起始端口号,例如:1000
  3. end_port: 结束端口号 ,例如:65535
  4. port_interval: 端口号间隔,每隔 port_step 个端口做检查,例如:10

步骤

  1. 被测端先启动
  2. 10 秒钟内启动检测端
  3. 待检测端脚本执行完毕,去被测端查看 output_file

注意

  1. 一定要在 10 秒钟内启动检测端,如果两端间 lag 比较高,可以修改脚本将 10 秒钟的 timeout 调大
  2. port_interval 建议设置 10 以上,过小可能会导致进程数过多而使bash hang 掉
  3. 两端的参数除了第1个以外,剩余3个均应完全相同