Linuxでは、リモートホストの開いているすべてのポートを取得します。

Linuxでは、リモートホストの開いているすべてのポートを取得します。

リモートホストの特定のポートに接続してみてください。ホストに接続できますが(pingコマンドで確認)、ポートは接続されません。

私のサーバーでこのリモートホストのすべてのアクセス可能なポートを確認する方法はありますか?

注:このサーバーは企業のセキュリティサーバーであり、nmapまたはサードパーティ製のツールは利用できず、インストールできません。

答え1

うまく動作する以下のスクリプトを試してみてください。

for i in host1 host2; 
do 
timeout 10 ssh -o 'StrictHostKeyChecking no' $i -A "exit"
if [[ $? == 0 ]]
then 
echo "host $i is sshable"
ssh -o 'StrictHostKeyChecking no' $i -A <<'EOF'
k=`hostname`
netstat -altnp| awk '$0 ~ /LISTEN|ESTABLISHED/'| awk '{print $4}'| awk -F ":" '{print $NF}'| awk '{if(!seen[$1]++)print $0}'| sed "1i below are open ports on the host '$k'"
EOF
else echo "host $i is not sshable"
fi
done

答え2

このスクリプトはシングルポートスキャンに適しています。

if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
  echo "Port is open"
else
  echo "Port is closed"
fi

開いているポートをキャプチャするには、1秒が速すぎるかどうかはわかりませんが、ポートの全範囲は次のとおりです。

#!/bin/bash
for PORT in {1..65535}; do
timeout 1 bash -c "</dev/tcp/45.62.xxx.xxx/$PORT &>/dev/null" &&  echo "Port $PORT is open"
done

関連情報