为什么Wireshark不能识别这个HTTP响应?

我有一个简单的CGI脚本,输出简单的文本内容。 它是用Perl编写的,使用CGI模块,它只指定最基本的标题:

 print $q->header( -type => 'text/plain', -Content_length => $length, ); print $stuff; 

function没有明显的问题 – 用户代理和服务器都没有抱怨,但是我对Wireshark不能识别HTTP响应的事实感到困惑 – 它被标记为TCP。

这里是请求和响应,如“Follow TCP Stream”对话框所示:

 GET /cgi-bin/memfile/memfile.pl?mbytes=1 HTTP/1.1 Host: 10.0.0.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: cs,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive HTTP/1.1 200 OK Date: Thu, 05 Apr 2012 18:52:23 GMT Server: Apache/2.2.15 (Win32) mod_ssl/2.2.15 OpenSSL/0.9.8m Content-length: 1048616 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/plain; charset=ISO-8859-1 XXXXXXXX... 

这里是数据包概述)

 No. Time Source srcp Destination dstp Protocol Info tcp.stream abstime 5 0.112749 10.0.0.1 80 10.0.0.2 48072 TCP [TCP segment of a reassembled PDU] 0 20:52:23.228063 Frame 5: 1514 bytes on wire (12112 bits), 1514 bytes captured (12112 bits) Ethernet II, Src: 00:12:34:56:78:9a, Dst: 00:12:34:56:78:9b Internet Protocol Version 4, Src: 10.0.0.1 (10.0.0.1), Dst: 10.0.0.2 (10.0.0.2) Transmission Control Protocol, Src Port: http (80), Dst Port: 48072 (48072), Seq: 1, Ack: 330, Len: 1460 

现在,当我在Wireshark中打开stream时:

  • 前三个数据包是通常的TCP握手
  • 第四个数据包的GET请求显示为HTTP,在“信息”字段GET /cgi-bin/memfile/memfile.pl ,如我所料
  • 第五个数据包包含响应,但未标记为HTTP响应。 我希望信息字段是像“HTTP 200 OK”,但只有一个通用的“[重新组装的PDU的TCP段]”。 真正的不便之处在于这个数据包没有被“http.response”filter捕获

有人可以解释为什么Wireshark不能识别第五个数据包的HTTP性质吗? 响应有什么问题吗?

我自己也有同样的问题,在Wireshark问答中find了答案 :

您可以通过禁用TCP协议首选项中的“Allow Subdissector to reassemble TCP streams”(您需要在禁用该选项后重新启动Wireshark),让Wireshark直接显示HTTP响应。

解释为什么 Zorel的答案….

当WireShark首选项是重组多个包的消息时,它不知道这些消息 HTTP,直到它看到了所有的消息并重新组装完成。

所以数据包首先被报告为TCP(它们是),然后重新组装成HTTP报告。

在重新组装的行中,您应该看到如下所示的内容:

 Frame 10: ... ... [3 Reassembled TCP segments (2496 bytes): #8(316), #9(1324), #10(856)] Hypertext Transfer Protocol ... 

其中指出了哪些logging号,以及每个字节提供了多less个字节来进行重组。

在你的情况下,响应是1048616字节,所以它知道它是HTTP之前将是很多包。 你指出的条目确实说:

 [TCP segment of a reassembled PDU] 

这是另一个迹象,WireShark推迟了这个消息的最终显示。