【问题标题】:how to dump http traffic?如何转储http流量?
【发布时间】:2013-07-12 14:03:51
【问题描述】:

我正在使用 Web 服务,我需要获取所有 HTTP 请求和响应的转储,以便调试设备之间的互操作性。

我有一台带有 3 个桥接的 nic 的小型电脑,因此它充当集线器,我可以利用流量。我正在寻找一种轻松转储 HTTP 流量的方法,以便分析两个设备交换的 SOAP 消息。

因为我更喜欢用 python 来实现它,我用HTTP extension 尝试了 scapy,但它似乎不起作用,因为我看到请求被解析了 3 次(我想知道这是否是由于使用了桥),我无法看到响应。

还有其他方法可以实现这样的工具吗?我更喜欢python,但这不是强制性的。

另一个小问题

我添加了一个子问题:通过使用我在上一个问题中链接的 HTTP 解释器,我发现我有时会收到仅被识别为 HTTP 而不是 HTTPRequest 或 HTTPResponse 的数据包。这样的数据包看起来是 gzip 压缩的,我认为它们与响应主体不适合单个数据包的事实有关。 scapy 有办法将这些数据包合并在一起吗?我需要一种方法来获取消息的正文。同样,不仅在 python 中,而且不仅在 scapy 中。

【问题讨论】:

    标签: python http scapy sniffing


    【解决方案1】:

    我终于通过在管道中使用 tshark 并使用 python 脚本解析其输出解决了我的问题。大部分解码活动由以下命令执行

    tshark -l -f "tcp port 80" -R "http.request or http.response " -i br0 -V
    

    输出解码后的 HTTP 数据包。我的脚本会执行所有必要的操作。

    【讨论】:

      【解决方案2】:

      对于原始嗅探,我会使用 tcpdump 写入 pcap 文件。

      tcpdump -i <interface> -s 65535 -w file.pcap  port 80
      

      -s 表示写出整个数据包,-w 被保存。我假设您的 http 通过端口 80,但您可以制作任意复杂的过滤器表达式。确保接口是通向服务器的接口,以便您了解它发送和接收的内容以及流量如何到达您的网桥主机。

      然后,您可以在闲暇时使用 scapy 解析 pcap,因为您知道捕获是以经过良好测试、快速且可靠的方式进行的。

      rdpcap("/tmp/file.pcap")
      

      【讨论】:

      • 好吧,据我了解,scapy 运行 tcpdump 并读取其输出,所以我不知道这是否会产生巨大的影响......
      • 有趣,我学到了一些新东西。看起来您的技巧将是找到正确的界面和过滤表达式。
      【解决方案3】:

      周围已经有一些值得尊敬的流量嗅探器,因此您可能不需要自己实现一个。 Wireshark 是最受欢迎的。它不仅可以让您捕获流量,而且还有一些很棒的工具可以过滤和分析数据包。

      sharktools 允许您使用 Python 中的 Wireshark 数据包解析引擎,例如过滤数据包。

      如果您有非常特殊的需求或只是想学习新知识,pylibpcaplibpcap 库的 Python 接口,(几乎)所有流量捕获程序都在使用它。

      UPD:修正了pylibpcap 网址中的拼写错误。

      【讨论】:

      • 使用 pylibpcap 我只得到数据包,而不是整个请求和响应
      • 没错,这种情况下你必须自己分析数据包。我不知道有任何图书馆可以帮助完成这项特定任务。还有sharktools之类的,一会儿更新答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2019-07-19
      • 1970-01-01
      • 2023-03-04
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多