如何仅从tshark返回Http标头?


12

我正在使用tshark嗅探我的数据包,而我只关心http标头(最好以其发送的形式,但我会尽力而为)。

我尝试使用:

tshark tcp port 80 or tcp port 443 -V -R "http"

这给了我标题,但也给了我内容(我不想要它,因为它要分析大量的垃圾)。我真的只关心标头,是否有任何简单的方法来获取标头(除了自己解析数据之外)。

编辑:我应该证明我也关心主机/端口,以便可以跟踪多个数据包中的请求。

Answers:


18

您可以使用特定的HTTP标头显示过滤器来仅显示请求标头,仅显示响应标头或同时显示这两个标头。

仅针对请求标头:

tshark tcp port 80 or tcp port 443 -V -R "http.request"

仅针对响应头:

tshark tcp port 80 or tcp port 443 -V -R "http.response"

对于请求和响应头:

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

注意:这不仅会过滤出标头,也不会仅过滤出包含标头的数据包,因此您可能仍会获得一些数据,但是数据量应少于其他情况。


我们仍然在谈论大量数据,好像我有一个对en.wikipedia.org的请求一样,当我实际上只希望标题少于1k时,我将获得750k。
tzenes 2010年

tshark是一个数据包捕获工具,您可能需要研究Fiddler或其他仅HTTP分析工具。
重载2010年

我不熟悉提琴手,但我的目标是跟踪连接吞吐量,因此我想知道requesttime / firstbyte / lastbyte,同时保留HTTP标头。tshark已经解决了我的大部分问题,我只需要获取标题即可。
tzenes 2010年

3
它产生“ tshark:无效的捕获过滤器”(Tshark 2.0.2)。作为一种解决方法,我使用了:tshark -V -Y http.request tcp port 80 or tcp port 443
jfs


3

我能够组合来自@heavyd的答案,并通过我从SO文章获得的sed过滤器运行它-(FJ的答案)来煮熟这个婴儿,它只过滤出标题:)

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered

1
sed令人恐惧,原因是我看不懂它,但是却像魅力一样。
Setheron

2

我自己的过滤器版本,易于阅读:

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

这样,我只能看到相关的IP和TCP信息,而不会看到所有低级内容,还有完整的HTTP信息。


sudo tshark -V -s0端口80 -Y“(http.request || http.response)” | awk“ /超文本传输​​协议/,// ^ $ /”
Lmwangi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.