如何检查服务器上某个端口是否开放?

如何检查服务器上某个端口是否开放?

我一直使用共享主机托管我的网站。我想部署使用 Ratchet PHP 构建的 PHP WebSocket 应用程序。因此我希望它监听端口 9000。

当我在 SSH 访问中运行命令时,php server.php它显示服务器已启动并正在监听 domain.com:9000。但在我的聊天应用程序中,它需要一些时间,然后显示:

Firefox 无法与 ws://domain.com:9000/ 的服务器建立连接

另外,我已经检查了telnet domain.com 9000哪些结果

无法在端口 9000 上打开与主机的连接:连接失败。

我联系了客服,他们说

您的端口 9000 已开放用于出站连接。

我如何检查我的端口是否打开?如果打开了,为什么它不监听作为客户端的 Web 浏览器与服务器的连接?

答案1

您的端口 9000 已开放用于出站连接。

但这不是你想要做的。你正在尝试制造一个入站与服务器的连接,而不是来自服务器的出站连接。

我如何检查我的端口是否已打开?

联系托管服务提供商,并明确说明您想要设置听众在共享主机帐户的 9000 端口上,而不是建立出站连接。

在共享服务器上,托管服务提供商可能根本不允许任何入站连接,或者他们可能要求您使用特定范围的端口。

(同时,在私人/专用服务器上,唯一的限制是您在服务器防火墙上自己设置的限制,因此您可以通过查看防火墙规则进行检查 - iptables、ufw、firewalld 等。)

答案2

如果您有 ssh 访问权限,在 Linux 系统中,您可以使用 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检查端口。

相关内容