捕获按各个 TCP 流分组的 Web 流量

捕获按各个 TCP 流分组的 Web 流量

据我所知,HTTP 请求和响应会构建一个 TCP 连接。为了在无 GUI 服务器上调试 Web 应用程序,我希望能够在单个可区分的实体(相同的颜色、文件、数据库记录等)中捕获这些 TCP 流。

tcpdump只能在 IP 数据包到达或离开时保存它们,而无需排序或重新组装。tcpflow更进一步,在单独的文件中重新组装 TCP 连接,但将发送和接收流放在单独的文件中,这使得快速调试变得烦人。我确信我可以编写一个脚本甚至一行代码来合并相关文件,但我猜测tcpflow这项工作的包装器可能会引入tcpflow.我也很懒,正在寻找更清洁的解决方案。

任何建议,将不胜感激。

答案1

您可以将 pcap 文件复制(或流式传输)到桌面并使用 Wireshark GUI 进行数据包分析。除了 GUI 之外,还有tshark命令(包含在 Wireshark 中)。给定流编号,您可以使用以下命令将其请求和响应组合在单个输出中:

$ tshark -q -r http.pcapng -z follow,tcp,ascii,1

===================================================================
Follow: tcp,ascii
Filter: tcp.stream eq 1
Node 0: 10.44.1.8:47833
Node 1: 178.21.112.251:80
77
GET / HTTP/1.1
User-Agent: curl/7.37.0
Host: lekensteyn.nl
Accept: */*


        356
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.4.7
Date: Sun, 29 Jun 2014 10:24:34 GMT
Content-Type: text/html
Content-Length: 160
Connection: keep-alive
Location: https://lekensteyn.nl/

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.4.7</center>
</body>
</html>

===================================================================

tshark有关详细信息,请参阅 的手册页。基本上,-q抑制正常的数据包显示,-r http.pcapng选择捕获文件,-z follow,...相当于跟随 TCP 流在图形用户界面中。不幸的是,您必须对每个流重复此命令,这并不理想。

至于将连接流式传输到 Wireshark GUI,您可以使用以下命令:

ssh you@server 'tcpdump -w - "tcp port 80"' | wireshark -i - -k

如果这仍然不是您想要的,那么您可以考虑设置代理,然后通过该代理记录所有内容。

相关内容