wireshark 中的数据包分析 - 如何区分 HTTP 协议和 TCP

Packet analysing in wireshark - How to distinguish HTTP protocol from TCP

我正在做一个学校项目,在这个项目中我必须使用 libcap 库分析 C 语言的 .pcap 文件。我是网络新手,但我知道 TCP 在 OSI 模型的第 4 层,HTTP 在第 7 层。我想对 HTTP 数据包进行排序,并打印出 source/destination 端口,但我对如何区分 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协议?

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

在你的例子中,你显示的数据包的长度为 0,所以除了不同层的各种 header 之外,真的没有什么可以分析的。数据包不是 HTTP。

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