如何配置 pcapplusplus 使其不忽略 PcapLiveDevice 上大于 MTU 大小的数据包?

How to configure pcapplusplus so it doesn't ignore packets which are greater than MTU size on PcapLiveDevice?

我正在使用 pcapplusplus 库在 C++ 中进行 tcp 数据包处理。当我收到大于 MTU 大小的数据包时,即 1500 bytes,我的程序停止进一步处理,因为 TcpReassembly 没有处理该数据包。由于这个 onMessageReadyCallback 没有调用那个数据包。

更严重的是,由于该数据包被 tcpReassembly 忽略,因此该数据包的相应序列号,比方说 x,也被忽略了。所以我的程序无法处理任何其他传入数据包,因为它期望序列号 x 但 tcpReassmbly 已经忽略了该数据包,因此它不会接收序列号 x 的数据包和程序执行停止。

所以我的问题是我们是否有办法直接 tcpReassembly 不忽略大于 MTU 大小的数据包。将其转发到相应的函数回调?

基本上问题出在 tcpreplay 而不是 pcpp::TcpReassembly。 Tcpreplay 无法发送大于接口 MTU 的数据包 [https://tcpreplay.appneta.com/wiki/faq.html].

所以现在让我说明问题发生的地方。我有一个 pcap 文件,我正在使用 tcpreplay 在接口上重放这些数据包。但是 tcpreplay 不会重播巨型数据包。它只是忽略了那些数据包。

因此,当该数据包被忽略时,TcpReassembly 正在等待该序列号,但它以后永远不会得到该序列号,因为该序列号已经被忽略了。

虽然下一个数据包会来,但是如果没有收到被忽略的序列无数据包,TcpReassembly 不会继续。所以程序执行停止了,就像应用程序挂起一样,但那是在 tcpreplay 端,而不是 TcpReassembly 端。你不必担心 TcpReassembly,它会重新组装它收到的任何数据包。 MTU 大小没有任何限制。我也检查了 TcpReassembly 的 cpp 文件,没有检查如果数据包大小大于 MTU 大小,则忽略数据包。