我正在使用 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 信息。