【问题标题】:Packet analysing in wireshark - How to distinguish HTTP protocol from TCPWireshark 中的数据包分析 - 如何区分 HTTP 协议和 TCP
【发布时间】:2021-02-02 16:45:36
【问题描述】:

我正在做一个学校项目,我必须使用 libcap 库分析 C 语言中的 .pcap 文件。我是网络新手,但我知道 TCP 位于第 4 层,HTTP 位于 OSI 模型的第 7 层。我想对 HTTP 数据包进行排序,并打印出源/目标端口,但我有点困惑如何区分 HTTP 协议和 TCP 协议。 这是一个例子,我不明白:

编辑:这是另一个示例,其中源端口为 80,长度为 100。第 54 个字节为 48,与 HTTP 1.1 响应数据包相同。它是一个 TCP。 https://i.stack.imgur.com/RQs6v.png

这里的目的端口是80,也就是HTTP。但是,wireshark 并没有将此数据包列为 HTTP 协议,它只是 TCP。 https://i.stack.imgur.com/TsVuO.png 我的问题是如何根据字节确定数据包是HTTP协议还是只是TCP协议?

【问题讨论】:

  • 您显示的数据包不是 HTTP 数据包。它有Len: 0,表示它是一个仅ACK 数据包。判断是否为HTTP,需要解析payload,看是否有HTTP规范定义的有效数据。
  • 我还是不明白,我编辑了帖子。
  • 您在RQs6v.png 中显示的数据包确实是一个HTTP 数据包。哪里wireshark说它不是?

标签: c data-analysis wireshark pcap


【解决方案1】:

您无法仅通过查看数据包的标头来确定数据包是否为 HTTP。 HTTP 是应用程序级别的,如果要识别 HTTP 流,则必须检查数据包的最里面的有效负载。换句话说,仅通过查看 TCP 标头之后的内容就可以区分 HTTP 数据包。 Wireshark 已经为您完成了这项工作,并将看起来像 HTTP 的数据包标记为此类。您只需在顶部的过滤栏中输入http,即可过滤被 Wireshark 识别为 HTTP 的数据包。

在您的情况下,您显示的数据包的长度 = 0,因此除了不同层的各种标头之外,实际上没有什么要分析的。数据包不是 HTTP。

可以通过查看有效负载来确定“基于字节”的 HTTP 流量:HTTP 请求和响应具有已知格式。例如,HTTP 1.1 请求以<METHOD> <URI> HTTP/1.1\r\n 开头,响应以HTTP/1.1 <CODE> <MSG>\r\n 开头。

【讨论】:

  • 感谢您的回答,但目前尚不清楚如何仅根据字节区分两个数据包。我编辑了帖子并添加了另一个示例。
  • @Zsolti 您正在查看数据包的标头。正如我所说,您无法仅通过查看标头来区分 HTTP 数据包。您需要查看 TCP 有效负载。您的第二个示例根本没有显示有效负载(lan:0)!
猜你喜欢
  • 2017-12-30
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2015-12-11
  • 2020-07-31
  • 2021-12-08
  • 2020-03-25
相关资源
最近更新 更多