使用 tcpdump 监控 HTTP 流量

ott*_*ath 42 tcpdump tshark

为了监视服务器和 Web 服务器之间的 HTTP 流量,我目前使用tcpdump. 这工作正常,但我想摆脱输出中的一些多余数据(我知道tcpflowwireshark,但它们在我的环境中不容易获得)。

tcpdump手册页:

打印所有进出端口 80 的 IPv4 HTTP 数据包,即仅打印包含数据的数据包,而不是,例如,SYN 和 FIN 数据包以及仅 ACK 数据包。

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

这个命令

sudo tcpdump -A 'src example.com 和 tcp 端口 80 和 (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2) ) != 0)'

提供以下输出:

19:44:03.529413 IP 192.0.32.10.http > 10.0.1.6.52369: Flags [P.], seq 918827135:918827862, ack 351213824, options 437noval, 439pnoval, 437noval, 4399, 439

E...@....... ....P..6.0.......D...... __..e=3...__HTTP/1.1 200 OK 服务器:Apache/2.2.3 (Red Hat) Content-Type:text/html;charset=UTF-8 日期:2009 年 11 月 14 日星期六 18:35:22 GMT 年龄:7149
内容长度:438

<HTML> <HEAD> <TITLE>示例网页</TITLE> </HEAD> <body>
<p>您已访问此网页...</p> </BODY> </HTML>

这几乎是完美的,除了突出显示的部分。这是什么,结束——更重要的是——我该如何摆脱它?也许只是对命令末尾的表达式稍作调整?

Ale*_*vic 39

tcpdump 打印完整的数据包。你看到的“垃圾”实际上是 TCP 包头。

您当然可以使用 ie perl 脚本来处理输出,但为什么不使用 tshark(wireshark 的文本版本)呢?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

它采用与 tcpdump(同一个库)相同的参数,但由于它是一个分析器,它可以进行深度数据包检查,因此您可以进一步细化过滤器,即

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'

  • 您还可以通过匹配每个字符的 ASCII 值来在捕获过滤器中搜索“GET”:`tcp port 80 和 tcp[((tcp[12:1] &amp; 0xf0) &gt;&gt; 2):4] = 0x47455420`。不久前,我在 Wireshark 网站上添加了一个页面,帮助您创建字符串匹配捕获过滤器:http://www.wireshark.org/tools/string-cf.html (4认同)

pQd*_*pQd 18

看看ngrep - 它可能对你有用。

作为其他人的参考httpry [服务器现在似乎已关闭,但我希望它是暂时的] 和tshark也可用于被动协议分析 - 第一个仅用于 http,第二个 - 更多。

  • +1 表示 ngrep。非常有用的工具。 (2认同)

小智 5

尝试httpryjustniffer

Justniffer 可以很好地处理 tcp 数据包重新排序重传和 ip 碎片