bash 脚本,使用 bash 内置的 /dev/tcp 检查端口响应,时间延迟 |挂起|加速

bash 脚本,使用 bash 内置的 /dev/tcp 检查端口响应,时间延迟 |挂起|加速

使用此脚本,我检查主机是否在给定端口上响应bash 的内置 /dev/tcp

我可以使用 IP 地址或域(主机名)。

脚本1

#!/bin/bash

HOST_NAME="127.1"
HOST_PORT="80"

if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then
    echo -e "PORT: ${HOST_PORT} | ON"
    else
    echo -e "PORT: ${HOST_PORT} | OFF"
fi

exit;

脚本2

#!/bin/bash

HOST_NAME="127.1"

for HOST_PORT in {1..1000}
do

if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then
    echo -e "PORT: ${HOST_PORT} | ON"
    else
    echo -e "PORT: ${HOST_PORT} | OFF"
fi
done

exit;

脚本3

#!/bin/bash

HOST_NAME="127.1"
declare -A PORT_ON

for HOST_PORT in {1..65535}
do
    if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then
        PORT_ON[${HOST_PORT}]="ON"
    fi
done

for i in ${!PORT_ON[*]}
do
    echo -e "$i : ${PORT_ON[$i]}"
done

exit;

在我们的一些本地和在线域上脚本3挂在某些端口上,并且需要更长的时间才能跳转到下一个端口扫描,例如在 ssh 上(由于防火墙或其他服务)。我该如何管理它,它会立即继续,是否可以加快脚本速度,当我扫描所有 65535 端口时,它需要很长时间。

我的 GNU/Linux 发行版:

Distributor ID: Debian

Description:    Debian GNU/Linux 10 (buster)

Release:        10

Codename:       buster

4.19.0-16-amd64

我的/etc/apt/sources.list

deb http://security.debian.org/debian-security buster/updates main contrib

deb-src http://security.debian.org/debian-security buster/updates main contrib

deb http://deb.debian.org/debian/ buster-updates main contrib

deb-src http://deb.debian.org/debian/ buster-updates main contrib

我只能从这个存储库安装。

bash 脚本,使用 bash 内置的 /dev/tcp 检查端口响应,时间延迟 |挂起|加速

如何加快和终止时间延迟?

答案1

运行这个timeout

我放置了一个计时器变量来检查运行时间。

看来你不能比0.01.

如果使用 执行此脚本0.001,您将只能看到计时器变量的结果,而看不到其他结果。

即使使用1,0.10.01, 你也总是会得到相同的结果。

我用 Ubuntu 22.04 测试了这个脚本并将端口设置为 10000。

#!/bin/bash

starttime=$(date +%s)
HOST_NAME="127.0.0.1"
declare -A PORT_ON

for HOST_PORT in {1..10000}
do
 if((timeout 0.1 bash -c "</dev/tcp/${HOST_NAME}/${HOST_PORT}") 2> /dev/null); then
    PORT_ON[${HOST_PORT}]="ON";
  fi
done

for i in ${!PORT_ON[*]}
do
  echo -e "$i: ${PORT_ON[$i]}"
done

endtime=$(date +%s)

echo "runtime: $(($endtime - $starttime))"

相关内容