我正在使用tcpdump
命令来获取HTTP数据,命令如下:
sudo tcpdump -A -s 1492 dst port 80
上述命令的结果:
- Headers,我认为是请求和响应头。
- 无法读取的数据。
- URL为
GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg
。
我需要更清晰的结果,例如可读的请求 > 响应头 > 响应体等。如何过滤我的结果?
有针对HTTP GET和HTTP POST(或两者加上消息体)的tcpdump过滤器:
运行man tcpdump | less -Ip examples
以查看一些示例
以下是用于HTTP GET的tcpdump过滤器(GET
= 0x47
,0x45
,0x54
,0x20
):
sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
这是一个用于HTTP POST的tcpdump过滤器(POST
= 0x50
, 0x4f
, 0x53
, 0x54
):
sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
监控HTTP流量,包括请求和响应头以及消息正文(来源):
tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
欲了解 TCP 报头中的位操作详细信息,请参阅:字符串匹配捕获过滤器生成器(链接到 Sake Blok 的解释)。
less -Ip
这个命令,真是省了不少时间。 - n611x007我建议使用Wireshark,它有一个“跟踪TCP流”选项,可以非常容易地查看特定TCP连接的完整请求和响应。如果您更喜欢使用命令行,则可以尝试使用tcpflow,这是一种专用于捕获和重组TCP流内容的工具。
另一个选择是使用HTTP调试代理,例如Charles或Fiddler,正如EricLaw所建议的那样。它们具有特定的HTTP支持,使处理各种编码变得更加容易,并具有保存请求以重放或编辑请求等其他功能。
您还可以使用像Firebug(Firefox)、Web Inspector(Safari、Chrome和其他基于WebKit的浏览器)或Opera Dragonfly这样的工具,它们提供了查看请求和响应头和正文的一些能力(尽管大多数工具不能让您查看精确的字节流,而是浏览器解析请求的方式)。
最后,您始终可以手动构造请求,使用诸如telnet、netcat或socat连接到端口80并手动键入请求,或者使用htty这样的工具帮助轻松构造请求并检查响应。
tcpdump -w outfile ...
将原始数据包转储到文件中,然后将其复制到您的计算机上,并使用Wireshark进行分析。 Wireshark可以打开数据包转储文件,解码TCP流并解压缩HTTP内容(我假设无法读取的原因是因为它被压缩了)。 - Brian Campbelltcpdump -w outfile
,然后将其复制到具有Wireshark的机器上,并使用Wireshark查看转储。 - Brian Campbelltcpdump host www.blah.com -s 9000 -w outputfile; perl chaosreader0.94 outputfile
这是我倾向使用的:
tcpdump -s0 -Aql host example.com and port 80 -i any | grep -A5 -P 'HTTP'
-A5
是HTTP之后您想匹配的行数。
sed '/HTTP/,/^$/!d'
这样的命令可能会取代grep
。 - mwfearnley
tcpdump
的?你是将命令嵌入到你的应用程序中还是在连接到Android手机的PC上运行它? - faizal