【问题标题】:How can I merge 'split/partial' packets with libpcap?如何将“拆分/部分”数据包与 libpcap 合并?
【发布时间】:2015-01-27 08:04:12
【问题描述】:

我正在捕获 HTTP 数据包,正如我所料,它正在分解它们,因为一些打包程序对于一个数据包来说太大了。如何将数据包合并在一起?我查看了结构,没有任何东西弹出。我确实发现的一件事是所有应该属于一起的数据包的窗口大小都是相同的。

我也考虑过只是累积所有数据包数据,并使用 HTTP 标头信息进行解析,但必须有更好的方法 - 因为我确信我看到的某些数据包可以被拒绝并再次请求。

我正在使用 C 库,代码会很好,但我更感兴趣的是如何在库级别合并它们。

【问题讨论】:

    标签: packet libpcap tcp-ip packet-capture packet-sniffers


    【解决方案1】:

    我也考虑过只是积累所有的数据包数据,并使用HTTP头信息进行解析,但必须有更好的方法

    不,没有。

    如果“数据包”是指“HTTP 请求和响应”,那么确定 HTTP 请求或响应何时开始或结束的唯一方法是解析 HTTP 标头,例如查找指示HTTP 标头的结尾,以及 Content-Length: 标头,指示 HTTP 实体主体的长度(如果存在)。

    TCP 为在其上运行的 HTTP 等协议提供字节流服务。它提供 NO 服务来将该字节流分隔为数据包,因此 TCP 标头中有 NOTHING 来指示位置TCP 之上的数据包开始或结束。

    这正是 Wireshark 重组 HTTP 请求和响应的方式。

    我确信我看到的某些数据包可能会被拒绝并再次请求。

    这与这里有什么关系?

    【讨论】:

    • 我以为我会看到失败的数据包,但经过一番阅读,看起来我假设错了。非常感谢回复,我现在开始积累和HTTP解析。
    • “失败”在什么意义上?在 HTTP 层,您可能会看到失败的请求,但在网络层,这些请求与成功的请求并没有什么不同,并且如果请求因超时以外的原因而失败(即,服务器没有响应),对失败请求的回复将是一个 HTTP 回复——它恰好有一个像 404 这样的状态和一个像 this page 这样的实体主体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多