10

给定一个 pcap 文件,我可以使用Wireshark 提供的简洁过滤器从重构的 HTTP 请求和响应中提取大量信息。我还能够将 pcap 文件拆分为每个 TCP 流

我现在遇到的麻烦是,在我可以使用的所有很酷的过滤器中tshark,我找不到一个可以让我打印出完整的请求/响应正文的过滤器。我正在调用这样的东西:

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

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

4

4 回答 4

9

如果您愿意切换到另一个工具,tcptrace 可以使用 -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关闭主机名解析(没有这个会更快)
于 2012-01-24T14:37:12.170 回答
4

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

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

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

于 2020-01-08T20:05:04.617 回答
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,而且多行脚本很容易看)

于 2016-03-04T13:10:17.720 回答
0

我使用这一行来显示最后 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
于 2015-01-26T08:44:48.803 回答