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

Posted

技术标签:

【中文标题】我可以使用 tcpdump 获取 HTTP 请求、响应标头和响应正文吗?【英文标题】:Can I use tcpdump to get HTTP requests, response header and response body? 【发布时间】:2011-06-14 04:55:22 【问题描述】:

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

sudo tcpdump -A -s 1492 dst port 80

上述命令的结果:

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

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

【问题讨论】:

HTTP 响应可能被压缩或分块,获取原始文本可能无法真正满足您的需求(“不可读数据”)。您可能需要更完整地解释您想要做什么以及您的环境允许什么(例如,您不能只使用像 Charles 或 Fiddler 这样的 HTTP 代理)吗? 你是如何在 android 操作系统上运行 tcpdump 的?您是以某种方式将命令嵌入到您的应用程序中,还是在连接到 Android 手机的 PC 上运行它? @faizal - 您应该将 tcpdump 二进制文件安装到设备中,然后您可以从设备本身运行它,请使用此链接了解如何将 tcpdump 安装到 Android 设备中:gadgetcat.wordpress.com/2011/09/11/tcpdump-on-android跨度> 【参考方案1】:

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

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

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

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

【讨论】:

非常感谢您的回答大脑。我在 android OS 中使用 tcpdump :) 因此我受到使用 tcpdump 的限制,当然我可以获取标题和链接请求,我还需要获取正文、任何帮助、任何 Perl 转换脚本或类似的东西? @kimo 在这种情况下,我建议使用tcpdump -w outfile ... 将原始数据包转储到文件中,然后将其复制到您的计算机,并使用 Wireshark 对其进行分析。 Wireshark 可以打开数据包转储、解码 TCP 流并解压缩 HTTP 内容(我假设它不可读的原因是因为它被压缩了)。 谢谢Brian,我会尝试实现这个解决方案,无论如何最好将文件移动到PC,因为我应该过滤数据以获得想要的请求,而且这并不容易做到安卓系统。 Brian 我想我们在这里想说的是。我们如何使用 Busy Box 来解决这个问题。我在 Android 设备上也有同样的限制。 @JamesAndino 是的,在 Android 设备上,我建议使用 tcpdump -w outfile,然后将其复制到具有 Wireshark 的机器上并使用 Wireshark 查看转储。【参考方案2】:

这是另一个选择: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

【讨论】:

【参考方案3】:

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

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

这是一个用于 HTTP GET 的 tcpdump 过滤器(GET = 0x470x450x540x20):

sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

这是一个用于 HTTP POST 的 tcpdump 过滤器(POST = 0x500x4f0x530x54):

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 的解释)。

【讨论】:

我不知道less -Ip - 多么节省时间 我想看看那些 tcpdump 调用的解释 是否可以同时使用 HTTP GET 和 POST 过滤器? 这是巫术。有人请解释它是如何工作的。 explainshell.com/…

以上是关于我可以使用 tcpdump 获取 HTTP 请求、响应标头和响应正文吗?的主要内容,如果未能解决你的问题,请参考以下文章

tcpdump

聊聊tcpdump与Wireshark抓包分析

iOS,Android网络抓包教程之tcpdump

linux http嗅探工具 httpry

Tcpdump命令抓包详细分析

tcpdump iOS iphone 手机 抓包 流量分析