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結果のみが表示され、他の内容は表示されません。

10.1またはを使用しても0.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))"

関連情報