为什么 Wireshark 无法识别此 HTTP 响应?

Alo*_*dal 2 http wireshark

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

print $q->header(
    -type               => 'text/plain',
    -Content_length     => $length,
);
print $stuff;
Run Code Online (Sandbox Code Playgroud)

功能没有明显问题——用户代理和服务器都没有抱怨,但我对 Wireshark 无法将 HTTP 响应识别为 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...
Run Code Online (Sandbox Code Playgroud)

这是数据包概述)

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
Run Code Online (Sandbox Code Playgroud)

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

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

有人可以解释为什么 Wireshark 无法识别第五个数据包的 HTTP 性质吗?回复有问题吗?

小智 6

我自己也遇到过同样的问题,并在 Wireshark 问答中找到了答案

您可以通过禁用 TCP 协议首选项中的“允许子解剖器重新组装 TCP 流”来让 Wireshark 立即显示 HTTP 响应(禁用该选项后需要重新启动 Wireshark)。