【问题标题】:determining HTTP packets确定 HTTP 数据包
【发布时间】:2011-02-08 15:58:59
【问题描述】:

问候,

如何使用sharpcap从捕获的数据包中确定数据包是否为http数据包?

如果数据包是HTTP,我们能否确定frpm TCP数据包?

【问题讨论】:

    标签: c# http packet-capture sharppcap


    【解决方案1】:

    根据rfc2616 - Hypertext Transfer Protocol -- HTTP/1.1

    HTTP 消息的版本由消息第一行中的 HTTP-Version 字段指示

    因此,您可以检查数据包并扫描消息头中的 HTTP 版本文本和/或 HTTP 协议的其他已知字段。虽然如果一条消息被分成多个数据包,这种方法可能不会 100% 准确,但它可能已经足够好了,至少作为第一次切割。

    【讨论】:

    • 感谢贾斯汀的回复。如果我捕获了 TCP 数据包,我可以从数据字段中确定是否有 HTTP 消息?
    • @Eyla 是的,过滤端口 80 上 TCP 数据包的捕获,然后只检查标题的第一行。 HTTP 标头不需要像大多数网络协议那样从二进制文件中解析出来,因为数据是以 ASCII 格式接收的。只需将数据存储为字符串并使用通常的字符串解析方法对其进行解析。
    【解决方案2】:

    我是sharppcap/packet.net的作者/维护者。

    我有几个执行tcp 重组和http 解析的类,它们在复杂的网络监控应用程序中使用,以识别和关注http sessions。这些都经过了全面的单元测试和很好的评论。

    它们可用于二进制或源代码级别的许可。

    编辑:为什么要投反对票?开发代码和测试花费了数百个小时,这是一个已被重用的解决方案。在重新实现相同的功能之前,这当然值得考虑。

    【讨论】:

      【解决方案3】:

      听起来您正在查看单个 TCP 片段。如果它来自消息的开头,它将在第一行有一个 HTTP 版本,但如果你只是从网络中拉出随机数据包并希望能够告诉它们是 HTTP,那么你就不走运了- TCP 片段中没有任何内容表明其中的内容。唯一知道的方法是查看整个对话。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        • 2011-04-17
        • 1970-01-01
        • 2014-03-13
        相关资源
        最近更新 更多