如果我发现某个 IP 地址上的端口 X 已打开,那么我可以安全地假设我将在域名解析为该 IP 的域:X 处找到一个 Web 服务器吗?

如果我发现某个 IP 地址上的端口 X 已打开,那么我可以安全地假设我将在域名解析为该 IP 的域:X 处找到一个 Web 服务器吗?

假设www.example.com解析为 36.45.6.x,然后我扫描了该 IP 和端口 80,443,8080,nmap 告诉我它们都运行着 http 网络服务器,如果我访问http://www.example.com https://www.example.com http://www.example.com:8080网络服务器会回复吗?例如,IP 是否可以打开端口 X,但为了通过主机名访问它,我必须转到域:Y(其中 Y 是与 X 不同的端口)

答案1

端口 80 和 443 是为 Web 服务保留的端口,无论您是通过域名还是 IP 地址请求,端口都不会改变。8080 通常用于代理。唯一改变的端口是在客户端(您的)端,因为您的操作系统会选择一个随机可用的高端口号来完成连接。

虽然您可能会在 nmap 上得到回复,但有时当您通过 IP 地址请求时,可能无法访问驻留在那里的网站,因为规则规定必须通过域名请求。如果您不满足某些授予访问权限的条件(例如,只有来自白名单 IP 地址列表的客户端),即使通过域名请求,您也可能无法访问该网站。

答案2

我可以安全地假设如果我访问http://www.example.com https://www.example.com http://www.example.com:8080网络服务器会回复吗?

不,你不能假设任何事情。

虽然 80 和 443 是 IANA 为 HTTP 和 HTTPS 保留的,但是没有任何规定禁止任何人在这些端口上运行其他程序。

此外,从内核层面来看,端口可能被视为开放但充当诱饵。或者可能有一个进程确实连接到它,但由于某种原因它无法正常工作,因此根本不会响应。

但即使您有一个功能齐全的网络服务器,您也可能无法收到回复或无法收到预期的回复。

如果解析www.example.com192.0.2.42,则该 IP 地址上的 Web 服务器仍需要特别配置才能了解名称www.example.com(或以某种通配符方式配置以接受任何名称)。如果未配置,它将不知道要发回什么内容(同一 IP 地址上可能托管多个网站),并且可以发送其管理的网站之一的内容(例如在 Apache 中,配置文件中声明的第一个网站)或返回错误,例如 HTTP 400 或 500,以告知客户端名称错误。

这很容易发生,因为你可以找到任何现有的网站,找到它的 IP 地址,然后在任何区域,添加记录任何指向该 IP 地址的名称(或者在 Unix 系统上类似地修改/etc/hosts)。当然,该 IP 地址上的 Web 服务器无法知道这个新名称的含义,因此不会按预期回复。

比如,一个 IP 可以打开端口 X,但为了通过主机名访问它,我必须转到域:Y(其中 Y 与 X 是不同的端口)

那部分不清楚。IP 地址没有“端口”。您可能需要在 OSI 7 层网络模型或 Internet 模型上进行记录。简而言之,最底层是 IPv4 和 IPv6,没有端口,这个概念根本不存在。除此之外,还有 TCP 和 UDP 等协议,它们确实定义了端口。TCP 连接是一个 4 项元组:源 IP、源端口、目标 IP、目标端口。

在 TCP 之上,您有 TLS。TLS 握手通常以 ClientHello 消息中的“服务器名称指示”扩展开始。此扩展允许客户端指定主机名在该 IP 级别尝试访问的主机的名称。因为通过 DNS,客户端会将主机名(如从 HTTPS 的 URL 中提取)映射到 IP 地址,但如上所述,该 IP 地址可以对多个名称进行大规模虚拟托管,因此在发送第一个 HTTP 消息之前,TLS 服务器需要知道查询的是哪个主机名(以便能够立即返回正确的证书,因为这发生在 TLS 握手的早期,并且显然发生在任何 HTTP 交换之前),而这正是客户端使用 SNI 扩展所做的事情。

但是您所描述的情况可能会在某些代理和/或域隐藏情况下发生。

相关内容