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

kim*_*imo 64 android tcp http tcpdump

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

sudo tcpdump -A -s 1492 dst port 80
Run Code Online (Sandbox Code Playgroud)

上述命令的结果:

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

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

小智 177

有HTTP TET和HTTP POST的tcpdump过滤器(或两者都加消息体):

  • 运行man tcpdump | less -Ip examples以查看一些示例

  • 这是HTTP GET的tcpdump过滤器:

    sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
    Run Code Online (Sandbox Code Playgroud)
  • 这是HTTP POST的tcpdump过滤器:

    sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    
    Run Code Online (Sandbox Code Playgroud)
  • 监控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)'
    
    Run Code Online (Sandbox Code Playgroud)

有关TCP标头中bit-twiddling的更多信息,请参阅:String-Matching Capture Filter Generator(链接到Sake Blok的解释).

  • 我想看看那些tcpdump invokations的解释 (11认同)
  • 我不知道`less -Ip` - 多少节省时间 (9认同)
  • 这是巫术。有人请解释它是如何工作的。 (2认同)

Bri*_*ell 34

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

其他选项可能是使用HTTP调试代理,如CharlesFiddler,正如EricLaw所建议的那样.这些优点是具有对HTTP的特定支持,以便更容易处理各种编码,以及其他功能,如保存重播它们或编辑请求的请求.

您还可以使用Firebug(Firefox),Web Inspector(Safari,Chrome和其他基于WebKit的浏览器)或Opera Dragonfly等工具,所有这些工具都提供查看请求和响应标头和主体的功能(尽管大多数它们不允许您查看确切的字节流,而是让浏览器解析请求的方式.

最后,你总是可以手工构建请求,使用telnet,netcatsocat之类的东西连接到端口80并手动输入请求,或者像htty这样的工具来帮助轻松构造请求并检查响应.

  • @kimo在这种情况下,我建议使用`tcpdump -w outfile ...`将原始数据包转储到文件中,然后将其复制到您的计算机,并使用Wireshark进行分析.Wireshark可以打开数据包转储,解码TCP流,并解压缩HTTP内容(我假设它不可读的原因是因为它被压缩了). (11认同)
  • 非常感谢你的答案Brain.我在android OS中使用tcpdump :)因此我受限于使用tcpdump,我肯定可以得到标题和链接请求,我还需要获取正文,任何帮助,任何Perl转换脚本或类似的东西? (2认同)

thi*_*007 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
Run Code Online (Sandbox Code Playgroud)