一段时间以来,我发现自己对数据包分析很感兴趣,并试图弄清楚我在网络捕获中看到的各种东西。我希望你们能帮我找到这个。
在公司网络中,我看到一台 Fortigate 100E 路由器不断向应用服务器发送 ICMP 数据包。我的第一个想法是,“好吧,没什么特别的,也许他们使用 ICMP 进行监控或保持活动”。但后来我注意到源端口和目标端口都已填入。
它在 ICMP 消息中使用 TCP。这很奇怪吧?我一直以为 ICMP 是第 3 层控制协议,不使用第 4 层 TCP。
另一件让我感到好奇的事情是,ICMP 流量是单向的,使用不同的目标端口。就像在进行端口扫描一样——这可能吗?源端口始终是 443。
我无法控制路由器,因此无法检查路由器配置。我只是想了解我在收到的跟踪中看到的流量。
答案1
根据 ICMP 消息类型(3
“目标不可达”),这些不是监控,而是错误数据包(这是 ICMP 最常见的用途)。它们不使用 TCP,但它们造成TCP 数据包。
为了让接收主机将错误报告与某个特定的套接字或连接关联起来,每个错误数据包必须包含原始数据包的网络层和传输层标头。因此,Wireshark 报告的端口号不是针对 ICMP 数据包本身,而是针对其有效负载(即导致此错误的原始 TCP 数据包)。
(Wireshark 将有效负载解析为嵌套的 IP 数据包,以便您可以看到信息,但它无法区分解析字段的“深度”,因此tcp.dport == 443
无论 TCP 标头有多深,整个捕获的数据包都会获得一个属性。)
通过查看 ICMP 有效负载(“返回”数据包),您可以看到 192.168.15.4:443 处的 HTTPS 服务器正尝试向客户端主机 172.16.30.3 发送 TCP FIN,但客户端主机已关闭且网关无法进行 ARP 查找,或者该数据包被网关阻止,因此未送达的数据包被返回到 Web 服务器。
(编辑:看着完整追踪OP 在现已删除的回复中发布了该回复,FIN 是在空闲约 60 秒后发送的,因此这看起来像是一种正常的情况,即客户端主机建立了一大堆 TCP 连接并首先交换了正常的请求/回复,但随后断开了与 Wi-Fi 的连接而没有关闭它们 - 或者类似的事情。网关的行为正常,并发送“主机不可访问”以指示它无法再通过 ARP 解析 172.16.30.3。)
另一件让我感到好奇的事情是,ICMP 流量是单向的,使用不同的目标端口。就像在进行端口扫描一样,这可能吗?源端口始终是 443。
客户端总是为每个 TCP 连接选择一个随机端口作为其源端口,因此服务器到客户端的响应看起来以 443 作为源并以随机目标作为目标,这是非常正常的。
你假设“源端口”总是意味着“客户端端口”,但情况并非总是如此——它取决于数据包最初去往的方向;对于数据包从服务器到客户端,源/目标端口号被交换(就像地址被交换一样)。