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

问题描述 投票:0回答:5

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

wireshark pcap packet-capture tshark
5个回答
10
投票
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
  • 关闭主机名解析(没有这个会更快)
如果您捕获了 pcap 文件,您可以执行以下操作来显示所有请求+响应。

5
投票
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,而且多行脚本在我看来很容易查看)
    

提出问题时这可能不是一个选项,但较新版本的 tshark 可以“跟踪”对话。

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

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

我使用此行显示最后 10 秒的请求正文和响应正文(

0
投票
):

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

在http响应中没有可以直接使用名为seq或id的列来连接响应和请求对,但是服务器可以通过TCP层计算出它。连接请求和响应的关键是参数http.response_for。 uri,所以答案如下:
tshar -r youfile.cap -T fields -Y "http.response.code==200" -e ip.src -e ip.dst -e http.response.code -e http.response_for.uri

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.