90

tcpdump通过执行以下命令来获取 HTTP 数据:

sudo tcpdump -A -s 1492 dst port 80

上述命令的结果:

  1. 标头,我认为是请求和响应标头。
  2. 不可读的数据。
  3. 网址GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg

我需要一个更清晰的结果,例如可读的请求 > 响应标头 > 响应正文等。如何过滤我的结果?

4

3 回答 3

217

HTTP GET 和 HTTP POST 有 tcpdump 过滤器(或两者都加消息正文):

  • 运行man tcpdump | less -Ip examples看一些例子

  • 这是 HTTP GET ( GET= 0x47, 0x45, 0x54, 0x20) 的 tcpdump 过滤器:

    sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
  • 这是 HTTP POST ( POST= 0x50, 0x4f, 0x53, 0x54) 的 tcpdump 过滤器:

    sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    
  • 监控 HTTP 流量,包括请求和响应标头以及消息正文():

    tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
    tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
    

有关 TCP 标头中位旋转的更多信息,请参阅:字符串匹配捕获过滤器生成器(链接到 Sake Blok 的解释)。

于 2013-05-17T13:31:43.017 回答
34

我建议使用Wireshark,它有一个“Follow TCP Stream”选项,可以很容易地查看特定 TCP 连接的完整请求和响应。如果您更喜欢使用命令行,可以尝试tcpflow,这是一个专门用于捕获和重建 TCP 流内容的工具。

其他选项将使用 HTTP 调试代理,如EricLaw 建议的CharlesFiddler 。这些具有对 HTTP 的特定支持的优势,可以更轻松地处理各种编码,以及其他功能,例如保存请求以重播它们或编辑请求。

您还可以使用Firebug (Firefox)、Web Inspector(Safari、Chrome 和其他基于 WebKit 的浏览器)或Opera Dragonfly之类的工具,所有这些都提供了查看请求和响应标头和正文的能力(尽管大多数它们不允许您查看确切的字节流,而是浏览器如何解析请求)。

最后,您始终可以手动构建请求,使用 telnet、netcatsocat等连接到端口 80 并手动输入请求,或者使用htty 之类的工具来帮助轻松构建请求并检查响应。

于 2011-01-23T23:33:56.030 回答
6

这是另一种选择:Chaosreader

所以我需要调试一个将 xml 发布到第 3 方应用程序的应用程序。我找到了一个出色的 perl 小脚本,它可以完成所有艰苦的工作——你只需将它放入一个 tcpdump 输出文件,它就会完成所有操作并输出你需要的一切......

该脚本名为 chaosreader0.94。见http://www.darknet.org.uk/2007/11/chaosreader-trace-tcpudp-sessions-from-tcpdump/

它就像一种享受,我做了以下事情:

tcpdump host www.blah.com -s 9000 -w outputfile; perl chaosreader0.94 outputfile
于 2012-05-20T08:35:44.370 回答