当我在 pcap 文件上执行以下 Python 代码时:
if tcp.dport == 80:
try:
http=dpkt.http.Request(tcp.data)
except (dpkt.dpkt.NeedData):
continue
except (dpkt.dpkt.UnpackError):
continue
if http.method == 'POST':
print('POST Message')
这是一个单独的 HTTP Post 消息,被分割成两个 TCP 段,每个段都在不同的数据包中发送。但是,因为第一个段仅是 TCP,而第二个被识别为 HTTP,所以当 dpkt.http.Request 尝试将第一个段读取为 HTTP 时,它似乎失败了。
到目前为止没有问题。失败是可以的,因为它不是真正的完整 HTTP 消息。但是,问题是它似乎根本没有阅读第二段(“ POST Message ”没有打印)!!!第二段完全被忽略,就好像它不存在一样!!!对此唯一可能的解释是 dpkt 会立即自动读取第二段,因为它识别出它们都是同一消息的段。
问题是,尽管同时读取两个 TCP 段(遵循上述假设),但结果 tcp.data 不会被识别为 HTTP 数据包,而是仍然被识别为 TCP,只是因为消息的第一段是仅 TCP 数据包。
那么我应该怎么做才能读取此类 pcap 文件的 HTTP 标头和数据呢?