我有一个简单的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时:
GET /cgi-bin/memfile/memfile.pl ,如我所料 有人可以解释为什么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推迟了这个消息的最终显示。