【问题标题】:Different order of packets in Wireshark vs tcpdump/libpcap?Wireshark 与 tcpdump/libpcap 中的数据包顺序不同?
【发布时间】:2016-04-12 03:59:55
【问题描述】:

我注意到,对于在 Linux 上将一个数据包文件从远程 FTP 站点传输到本地主机,Wireshark 始终可以以正确的顺序捕获数据包,但不能在 tcpdump/libpcap 或 RAW_PACKET 上的简单 recvfrom 中捕获混杂模式。

在前者中,“传输完成”响应总是在单个数据包之前(在不同的连接中,因此没有 TCP 重新排序),但在后者中,数据包总是先到达 - 根据协议和FTP 服务器的实现,因为“传输完成”是在发送数据之后发送出去的 - 如果客户端在数据之前收到它,它会停止等待数据连接,这从那时起就没有发生我可以清楚地看到数据。所以 libpcap/tcpdump 实际上是按错误的顺序捕获数据包但在 Wireshark 中没有这样的问题?

这怎么可能?? Wireshark 也使用 libpcap...

【问题讨论】:

  • 我发现如果原始数据包被“ETH_P_IP”(仅限IP数据包)捕获,来自不同连接的数据包的顺序将是正确的(如在Wireshark中),但不是“ETH_P_ALL”捕获一切!然而 ETH_P_ALL 是 tcpdump 中的默认值,所以它实际上被破坏了??
  • Wireshark 和 tcpdump 都使用 libpcap 捕获流量,而 libpcap ALWAYS 使用 ETH_P_ALL

标签: linux wireshark pcap tcpdump sniffer


【解决方案1】:

对于 FTP 协议负载在单独的 TCP 连接中传输,没有关于并行 TCP 连接中的数据包顺序的承诺(实际上即使在同一个 TCP 连接中,也没有关于数据包顺序的承诺,您的主机应该对它们进行排序)。

  1. 服务器有两个打开的套接字。
  2. 将文件写入数据套接字
  3. 之后,它立即将“传输完成”写入控制套接字。 2 和 3 之间的差异是几微秒。
  4. 数据包通过互联网运行,它们甚至可以选择不同的路径
  5. 它们以随机顺序出现在您的机器上。

附言tcpdump 文件也有数据包数和时间戳。数据包不一定按时间戳排序。 Wireshark 可以在显示时订购它们,查看订单字段。

【讨论】:

  • 时间戳不是错误的,但顺序根本不可能——正如我上面说明的那样,如果接收数据包的实际顺序错误,那么 FTP 客户端就会出现问题——所以真正的顺序是正确的,但它们被捕获的顺序是错误的。
  • 请在某处上传 tcpdump 并将链接放在这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
相关资源
最近更新 更多