我可以使用tcpdump获取HTTP请求,响应头和响应正文吗?

我正在使用tcpdump通过执行以下命令来获取HTTP数据:

 sudo tcpdump -A -s 1492 dst port 80 

以上命令的结果:

  1. 标题,我想请求和响应标题。
  2. 无法读取的数据。
  3. url GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg

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

有HTTP GET和HTTP POST的tcpdumpfilter(或两者都加正文):

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

  • 这里是HTTP GET的tcpdumpfilter:

     sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' 
  • 这是HTTP POST的tcpdumpfilter:

     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标头中的位旋转的更多信息,请参阅: string匹配捕捉filter生成器 (链接到Sake Blok的解释)。

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

其他选项将使用HTTPdebugging代理,如Charles Law或Fiddler,正如EricLaw所build议的那样。 这些优点是对HTTP具有特定的支持,以便更容易地处理各种编码,以及其他function,例如保存请求以重播或编辑请求。

您还可以使用Firebug (Firefox), Web Inspector (Safari,Chrome和其他基于WebKit的浏览器)或Opera Dragonfly等工具 ,所有这些工具都可以查看请求和响应标头和主体(尽pipe大部分他们不允许你看到确切的字节stream,而是浏览器如何parsing请求)。

最后,您可以使用telnet, netcat或socat等手工构build请求,以手动方式input请求,或使用htty等工具轻松构build请求并检查响应。

这是另一个select: 混沌阅读器

所以我需要debugging一个将xml发布到第三方应用程序的应用程序。 我发现了一个很棒的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