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

问题描述

我正在做一个学校项目,在这个项目中,我必须使用libcap库以C语言分析.pcap文件。我刚接触网络,但是我知道在OSI模型中TCP位于第4层,HTTP位于第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。 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开头。