【问题标题】:Fragmented UDP frame - only receiving one frame when sending with tcpreplay or scapy分段 UDP 帧 - 使用 tcpreplay 或 scapy 发送时仅接收一帧
【发布时间】:2017-07-12 22:03:56
【问题描述】:

我正在从一个 .pcap 文件重放,该文件包含一个已被分割成两个帧的 UDP 数据报。使用 tcpreplay 或 scapy 时,两个程序都表示它们都发送了两个帧,但我在直接连接的设备上只收到 1。任何想法为什么?

数据包捕获位于here

编辑:连接的设备是防火墙,我正在运行 tcpdump,所以我希望看到两个帧

Edit2:防火墙上的 tcpdump 应该打印它接收到的所有数据包,即使它由于某种原因被丢弃。但是,这是 tcpdump 打印的唯一数据包:

968.681737 lan in 172.23.0.5.1812 -> 172.16.0.4.37507: udp 1434 (frag 4486:1424@0+)

【问题讨论】:

  • 如果接收设备只是使用普通的套接字 API 来接收 UDP,可能设备上的 IP 堆栈工作正常,因此重新组装这 2 个数据包并将一个数据报传递给应用程序,就像它应该假设的那样到。
  • 我将编辑上面的描述 - 接收设备是一个网络设备(防火墙),所以我希望在防火墙上使用 tcpdump 时看到两个帧,但我只看到大片段,不是最后一块。
  • 那么您需要仔细描述您如何观察/确定设备仅“看到”一个数据包。一些防火墙肯定会重新组装 UDP 数据包以正确应用防火墙规则。其他人可能会根据您的配置丢弃其中一个片段,您必须提供很多关于您正在做什么以及如何配置防火墙的详细描述,以便任何人提供帮助。
  • 防火墙上的 tcpdump 应该打印它收到的所有数据包,即使它由于某种原因被丢弃。但是,这是 tcpdump 打印的唯一数据包:968.681737 lan in 172.23.0.5.1812 -> 172.16.0.4.37507: udp 1434 (frag 4486:1424@0+)
  • 您在运行 tcpdump 时是否使用了任何过滤器? (例如,端口过滤器只会匹配 1. 片段)

标签: udp ip scapy pcap tcpreplay


【解决方案1】:

您收到的是 UDP 数据报,而不是片段。如果两个分片都到达,IP 层会将它们组合起来,看到数据包现在已经完成,然后将其传递给 UDP 层,UDP 层会将其传递给接收进程。作为一个单独的重组数据报。

【讨论】:

  • 这对于基于套接字的应用程序是正确的,但不是 tcpdump,它应该显示所有以太网帧。在这种情况下,它只显示第一个 IP 片段,而不是重组的 IP 数据包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多