我有一台 rails 服务器(Linux)。我可以用机器 A 打开网站。使用机器 BI 只能使用 ssh 端口连接它,但无法打开网站,rails 服务器无法检测到 http 请求。由于机器 B 是 windows 平台,我打开cmd
并输入ping xxx.xxx.xxx.xxx
,它成功了。
我怀疑可能是 rails 站点 3000 的端口被防火墙屏蔽了,但是 ping 好像检测不到这个问题。有没有什么办法可以观察机器 B 向 rails 服务器发出 http 请求时发生了什么?
答案1
您还可以使用nmap测试其他网站上开放的端口
nmap -v -Pn -p 3000 xxx.xxx.xxx.xxx
答案2
方法有很多……这里列举几种。
- 使用网络数据包监视程序或嗅探器来监视进出网络连接的数据包;数据包嗅探器往往是特定于操作系统的。您可能需要在客户端和服务器上使用不同的嗅探器
- 用于
telnet -p {port_number}
测试端口号上的连接;通常安装在 Linux 系统上,不知道 Windows 上。 - 用于
netcat
连接端口 - 使用
curl
并启用调试选项-trace
就我个人而言,面对您的情况,我会telnet
首先查找并指定端口号。如果连接不上,我会尝试将服务器端口号更改为 80,看看是否可行。如果 80 可行而 3000 失败...那么就是有东西阻塞了它。在开发模式下设置 rails 服务器端口相当容易,但如果您找不到这些文档...请添加评论。;)
ping
是一个比您预期的更不实用的工具。它使用 ICMP 协议,而不是 TCP 或 UDP。因此,ICMP 可以访问 TCP 或 UDP 无法访问的内容。反之亦然 - ICMP 泛洪攻击非常普遍,因此某些主机在防火墙中禁用 ICMP - 即使您可以以通常的方式连接到端口 80 或 443。在没有外部防火墙的本地网络上,这是一个相当不错的连接测试。
答案3
去工具箱,这是一项提供各种网络诊断功能的在线服务。查找扫描并输入您的 IP 地址。您将看到该 IP 上打开的所有端口的列表。