我正在使用tcpdump
通过执行以下命令来获取HTTP数据:
sudo tcpdump -A -s 1492 dst port 80
上述命令的结果:
GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg
。 我需要更清晰的结果,例如,可读请求>响应标题>反应机构等 如何过滤结果?
答案 0 :(得分:167)
有HTTP GET&的tcpdump过滤器。 HTTP POST(或两者都加消息体):
运行man tcpdump | less -Ip examples
查看一些示例
这是HTTP GET的tcpdump过滤器:
sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
这是HTTP POST的tcpdump过滤器:
sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
监控HTTP流量,包括请求和响应标头以及邮件正文(source):
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-Matching Capture Filter Generator(链接到Sake Blok的解释)。
答案 1 :(得分:34)
我建议使用Wireshark,它有一个“Follow TCP Stream”选项,可以很容易地看到特定TCP连接的完整请求和响应。如果您更喜欢使用命令行,可以尝试tcpflow,这是一个专门用于捕获和重建TCP流内容的工具。
其他选项将使用HTTP调试代理,如Charles或Fiddler,正如EricLaw所建议的那样。这些优点是具有对HTTP的特定支持,以便更容易处理各种编码,以及其他功能,如保存重播它们或编辑请求的请求。
您还可以使用Firebug(Firefox),Web Inspector(Safari,Chrome和其他基于WebKit的浏览器)或Opera Dragonfly等工具,所有这些都提供了一些功能查看请求和响应标头和正文(尽管它们中的大多数不允许您查看确切的字节流,而是浏览器如何解析请求)。
最后,你总是可以手工构建请求,使用telnet,netcat或socat之类的东西连接到端口80并手动输入请求,或像{{3帮助轻松构建请求并检查响应。
答案 2 :(得分:6)
这是另一种选择:Chaosreader
所以我需要调试一个将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