据我所知,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
如果这仍然不是您想要的,那么您可以考虑设置代理,然后通过该代理记录所有内容。