【问题标题】:How do I use tshark to print request-response pairs from a pcap file?如何使用 tshark 从 pcap 文件中打印请求-响应对?
【发布时间】:2012-02-12 19:11:04
【问题描述】:

给定一个 pcap 文件,我可以使用 neat filters provided by Wireshark 从重构的 HTTP 请求和响应中提取大量信息。我也可以split the pcap file into each TCP stream

我现在遇到的问题是,在我能够与tshark 一起使用的所有酷过滤器中,我找不到一个可以让我打印出完整的请求/响应正文的过滤器。我这样称呼:

 tshark -r dump.pcap -R "tcp.stream==123 and http.request" -T fields -e http.request.uri

是否有一些过滤器名称可以传递给-e 以获取请求/响应正文?我最接近的方法是使用-V 标志,但它也会打印出一堆我不需要的信息,并且希望避免不得不用“愚蠢”过滤器拼凑出来。

【问题讨论】:

  • 原始捕获的陷阱是什么。如果你没有收集完整的数据包,你可能有数据。
  • 捕获很好。我使用的接口上的 MTU 是 1514,我捕获了 1600。我在 Wireshark 中打开了 pcap,可以将单个请求-响应对作为流;我只是在寻找一种针对它编写脚本的方法。
  • 酷 - 只是排除最明显的
  • TShark 选项 -O 怎么样(-O 协议:仅显示这些协议的数据包详细信息,逗号分隔) $ tshark -r clmt_04.pcap -R "http.request or http.response" -V -O http > http.txt
  • 认为这在 SO 或 SF 上会更有用。

标签: wireshark pcap packet-capture tshark


【解决方案1】:

如果您愿意切换到另一个工具,tcptrace can do this 使用 -e 选项。它还有一个 HTTP 分析扩展(xHTTP 选项),可为每个 TCP 流生成 HTTP 请求/响应对。

这是一个用法示例:

tcptrace --csv -xHTTP -f'port=80' -lten capturefile.pcap
  • --csv 将输出格式化为逗号分隔变量
  • -xHTTP 对于写入“http.times”的 HTTP 请求/响应,这也会打开 -e 以转储 TCP 流有效负载,因此您实际上也不需要 -e
  • -f'port=80' 过滤掉非网络流量
  • -l 用于长输出形式
  • -t 给我进度指示
  • -n 关闭主机名解析(没有这个会更快)

【讨论】:

  • 我使用了 tcptrace。这是相当有前途的。谢谢!出于某种奇怪的原因,仅使用 tcptrace -e my.dump 并没有正确分离出请求。我怀疑这只是我做错事的一个例子,因为 Wireshark 做同样的分裂就好了,所以我会再深入一点。如果您在头顶使用单线从标准 pcap 文件中提取请求-响应对(不幸的是,有一些截断的数据包),我会全神贯注 :)。
  • 添加了一个示例 - 这对我有用,但我相信如果你截断了数据包,你会遇到问题
  • 这对我来说是完美的,除了我还需要发送请求的确切时间戳。我正在尝试重现一个场景,即我需要在以前发生的同时发送这些东西。
【解决方案2】:

我使用这一行来显示最后 10 秒的请求正文和响应正文(https://gist.github.com/diyism/eaa7297cbf2caff7b851):

sudo tshark -a duration:10 -w /tmp/input.pcap;for stream in `sudo tshark -r /tmp/input.pcap -R "tcp and (http.request or http.response) and !(ip.addr==192.168.0.241)" -T fields -e tcp.stream | sort -n | uniq`; do sudo tshark -q -r /tmp/input.pcap -z follow,tcp,ascii,$stream; done;sudo rm /tmp/input.pcap

【讨论】:

    【解决方案3】:

    如果您捕获了 pcap 文件,您可以执行以下操作以显示所有请求+响应。

    filename="capture_file.pcap"
    for stream in `tshark -r "$filename" -2 -R "tcp and (http.request or http.response)" -T fields -e tcp.stream | sort -n | uniq`; do
        echo "==========BEGIN REQUEST=========="
        tshark -q -r "$filename" -z follow,tcp,ascii,$stream;
        echo "==========END REQUEST=========="
    done;
    

    我只是让 diyism 的答案更容易理解(你不需要 sudo,而且多行脚本很容易看)

    【讨论】:

      【解决方案4】:

      当问题被问到时,这可能不是一个选项,但较新版本的 tshark 可以“跟随”对话。

      tshark -nr dump.pcap -qz follow,tcp,ascii,123
      

      我知道这是一个非常古老的问题。我只是为最终在这里寻找当前解决方案的任何人添加此内容。

      【讨论】:

        猜你喜欢
        • 2023-02-07
        • 2017-07-03
        • 2019-11-03
        • 2015-01-26
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多