如何根据缺失的标头过滤 tcpdump 结果?

如何根据缺失的标头过滤 tcpdump 结果?

我的 HAProxy 将“X-Proto: SSL”作为标头添加到通过 HTTPS 的请求中。

我想使用 tcpdump 查看所有请求的“Host:”标头不要有'X-Proto: SSL'标头。

以下是一个示例请求(使用 sudo tcpdump -AA port 80 捕获):

14:06:48.834405 IP x.x.x.x.39989 > hostname.com.http: Flags [P.], seq 1:809, ack 1, win 58, length 808: HTTP: GET /req/?key=value&timeid=52989238 HTTP/1.1
..>........
...
.......GET /req/?key=value&timeid=52989238 HTTP/1.1
Host: r457.hostname.com
Origin: https://originhostname.com
User-Agent: Mozilla/5.0 (Linux; Android 8.1.0; TA-1044 Build/OPR1; wv) AppleWebKit/537 (KHTML, like Gecko) Version/4.0 Chrome/65 Mobile Safari/53;]
Accept: */*
Referer: https://originhostname.com/2018/
Accept-Encoding: gzip, deflate
Accept-Language: es-ES,es-MX;q=0.9,en-US;q=0.8
Cookie: cookieid
X-Requested-With: com.request.lite
X-Proto: SSL
X-Forwarded-For: x.x.x.x

我想排除这一点并只看到输出:

Host: r457.hostname.com

如果'X-Proto: SSL' 标头是不是展示。

答案1

这是我想出的一个非常棘手的解决方案,但我仍然对 The Right Way™ 感兴趣:

cd /mnt
mkdir -p ngrep/no-ssl
cd ngrep/
sudo ngrep -qW byline port 80 > all-traffic
awk -v RS= '{print > ("request-" NR ".ngrep")}' all-traffic
mv all-traffic ../
for x in $(ls); do if [ $(grep -c 'X-Proto: SSL' $x) -eq 0 ]; then mv $x no-ssl/; fi; done
cd no-ssl/
for x in $(ls); do grep 'Host:' $x; done|sort|uniq

相关内容