サーバー上でポートが開いているかどうかを確認するにはどうすればいいですか?

サーバー上でポートが開いているかどうかを確認するにはどうすればいいですか?

私は共有ホスティングを使用して Web サイトをホストしています。Ratchet PHP を使用して構築された PHP WebSocket アプリケーションをデプロイしたいと考えています。そのため、ポート 9000 でリッスンするようにします。

php server.phpSSH アクセスでコマンドを実行すると、サーバーが起動し、domain.com:9000 でリッスンしていることが示されます。ただし、チャット アプリケーションでは、しばらく時間がかかってから次のように表示されます。

Firefox は ws://domain.com:9000/ のサーバーへの接続を確立できません

また、私はtelnet domain.com 9000どの結果が

ポート 9000 のホストへの接続を開けませんでした: 接続に失敗しました。

サポートに問い合わせたところ、

ポート 9000 は OutBound 接続用に開かれています。

ポートが開いているかどうかを確認するにはどうすればよいですか? また、開いている場合、クライアントからサーバーへの Web ブラウザーによる接続をリッスンしないのはなぜですか?

答え1

ポート 9000 は OutBound 接続用に開かれています。

しかし、それはあなたがやろうとしていることではない。インバウンドサーバーからの送信接続ではなく、サーバーへの接続です。

ポートが開いているかどうかを確認するにはどうすればよいですか?

ホスティングプロバイダーに連絡し、リスナー送信接続を行うのではなく、共有ホスティング アカウントのポート 9000 で接続します。

共有サーバーでは、ホスティング プロバイダーが受信接続を一切許可しないか、特定の範囲のポートを使用するように要求する場合があります。

(一方、プライベート/専用サーバーでは、サーバーのファイアウォールに自分で設定した制限のみが適用されるため、iptables、ufw、firewalld などのファイアウォール ルールを確認して確認する必要があります。)

答え2

Linux システムで SSH アクセス権がある場合は、iptables を使用してファイアウォール ルールを照会できます。

sudo iptables -S | grep ACCEPT

ファイアウォール ルールが を使用して変更された場合はfirewall-cmd、次のコマンドを使用してルールを照会できます。

sudo firewall-cmd --list-all

ファイアウォールの完全な「マップ」を取得するには (さまざまなチェーンがどのように構成されているかを理解する必要がある場合に便利です)、次のコマンドを実行します。

sudo iptables -L

答え3

開いているポートを確認するための bash スクリプトを次に示します。

log_file=log_file    
ip_list=("192.168.111.1" "192.168.111.2" "192.168.111.3")    
#ip_list=$(cat ip_addr.txt)  #put all ip in the text file 
        for ip in "${ip_list[@]}"
             do
              nc -z -w5 "$ip" 22
                if [ $? -eq 0 ]; then
                    echo "$ip port 22 is open " >> $log_file
                else
                    echo "SSH port 22 is not open on $ip"
                fi
            done

ポートが開いているかどうかを確認するには、ncポートのチェックに使用します。

関連情報