我正在尝试识别我的计算机正在与之通信的 https 站点。我了解到,当我进入这样的网站时,会进行 DNS 调用,获取该网站的 IP 地址,然后与该 IP 地址的其余通信将被加密。

鉴于目标服务器的 IP 地址仍然可见,因此可以使用反向 DNS 查找将其转换为实际网站。

我在“首选项”中将“解析网络 (IP) 地址”等设置为 true。然后输入显示过滤器 tcp.port == 443 && ip.dst_host ==“example.com”,但在浏览器中输入不会产生任何数据包,即使网站确实在我的浏览器中加载。

我在 Wireshark 中做错了什么?

1

  • 您实际上可能想要的是检查 SSL 协商的 SNI 字段:


    – 


5 个回答
5

我在“首选项”中将“解析网络 (IP) 地址”等设置为 true。然后输入显示过滤器 tcp.port == 443 && ip.dst_host ==“bestbuy.com”,但在浏览器中输入不会产生任何数据包,即使网站确实在我的浏览器中加载。

  1. 正如 @vidarlo 所说,正向查找和反向查找可能不同(它们通常是不同的)

  2. DNS 名称可能有多个 IP 地址

  3. DNS 数据应该被你的计算机缓存

  4. HTTP[s] 数据可以缓存在你的浏览器中(取决于网站的配置方式)

如果您的目标是捕获数据,那么请查看浏览器中的开发人员工具中提供的内容,或配置您的 DNS 服务器以记录所有请求或通过记录请求的正向代理路由您的流量。

您可能没有做错任何事,但是反向映射不必与正向映射匹配。

Best Buy 使用 Akamai CDN 服务,因此www.bestbuy.com 对我来说指向23.32.24.193,解析为a23-32-24-193.deploy.static.akamaitechnologies.com.。这可能会与数百或数千个同样使用 Akamai 的其他网站共享。

“解析网络地址”选项使用 DNS 查询PTR给定 IP 地址的(“指针”)记录。DNS 返回的记录数据PTR可以是任何内容,但通常什么都没有。

如果您确实收到响应,则PTR记录中包含的数据通常只是信息。它们通常不会映射到真正的 DNS 条目。

因此,您可能无法通过它们将 wireshark 中的对话与域名进行匹配而获得巨大的成功。

正如其他答案所提到的,DNS 查询和反向 DNS 查找并不总是有助于找出您的计算机连接到的实际站点。

另一个选项是在 TLS 握手中查找服务器名称指示 (SNI)。Wireshark 会将其放在信息栏中。您tls.handshake.type == 1也可以使用过滤器查找这些握手数据包。

注意:这仅在您捕获 TLS 连接的开始时才有效。开始捕获时已经存在的连接不会显示。此外,我相信 SNI 仅由目标服务器用于为正确的站点提供服务,因此恶意软件(间谍软件等)可以向其主服务器发送伪造的 SNI,以使其看起来不那么可疑。

示例(从 Docker 容器中使用 curl 进行查询以保持捕获更清晰):

当我在新的浏览器中访问 bestbuy.com 时的示例:

HTTP3 基于 UDP,尽管它仍在使用端口 443。这可能是您看不到它的原因。

现代 Javascript 框架和浏览器可以钩住网站访问事件。在这种情况下,您将在浏览器地址中看到各种 URL,而无需发送数据包。执行硬重新加载(在 Firefox 中按 ctrl-shift-r,在 Chrome 中可能相同)。

你的朋友可能也是 SNI。谷歌搜索“服务器名称指示”。这使得主机名在 TLS 握手的前几百个字节中可见。这是 TLS(HTTPS)中已知的漏洞,至少已经有计划来阻止它。但在大多数情况下,在 HTTPS 连接的开始时,前几百个字节仍然包含服务器名称。其技术原因是同一个 IP 可能有多个基于名称的虚拟主机,它们具有不同的加密密钥或 TLS 设置。