我如何从 tshark 返回 Http 标头?

我如何从 tshark 返回 Http 标头?

我正在使用 tshark 来嗅探我的数据包,并且我只关心 http 标头(最好是其发送的形式,但我会采取我能得到的内容)。

我尝试使用:

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

它不仅给了我标题,还给了我内容(我不想要内容,因为要解析大量垃圾)。我真的只关心标题,有没有简单的方法可以只获取标题(除了自己解析数据)。

编辑:我应该有资格关心主机/端口,这样我就可以跟踪多个数据包的请求。

答案1

您可以使用特定的 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"

注意:这不会只过滤掉标头,只会过滤掉包含标头的数据包,因此您可能仍会获得一些数据,但数据量应该比其他方式少。

答案2

事实上你可以!之前的所有答案都非常接近。你只需要-O一个标志,过滤掉除 HTTP 之外的所有信息。

tshark -O http -R http.request tcp port 80 or tcp port 443

答案3

我能够结合@heavyd 的答案,并通过我从SO文章- (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

答案4

我自己编写的方便阅读的过滤版本:

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 信息。

相关内容