このスクリプトを使用して、ホストが特定のポートで応答していることを確認します。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.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))"