如何使用tshark从pcap文件中打印请求 - 响应对?

时间:2012-01-18 00:51:30

标签: wireshark pcap packet-capture tshark

给定一个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标志,但它也打印出一堆我不需要的信息,并且希望避免使用“哑”过滤器。

4 个答案:

答案 0 :(得分:8)

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

以下是一个用法示例:

tcptrace --csv -xHTTP -f'port=80' -lten capturefile.pcap
  • - csv 将输出格式化为逗号分类变量
  • 对于写入'http.times'的HTTP请求/响应的
  • -xHTTP ,这也会打开-e以转储TCP流有效负载,所以你真的不需要-e
  • -f'port = 80'以过滤掉非网络流量
  • -l <​​/ strong>表示长输出格式
  • -t 给我进度指示
  • -n 关闭主机名解析(没有这个就快得多)

答案 1 :(得分: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,多线脚本很容易看到)

答案 2 :(得分:2)

问问题时,这可能不是一个选择,但是较新版本的tshark可以“关注”对话。

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

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

答案 3 :(得分: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