使用 tcpdump 监控 HTTP 流量

使用 tcpdump 监控 HTTP 流量

为了监控服务器和 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:标志 [P.],seq 918827135:918827862,ack 351213824,win 4316,选项 [nop,nop,TS val 4093273405 ecr 869959372],长度 727

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

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

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

答案1

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

您当然可以使用 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"'

答案2

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

作为其他人的参考響響[ 服务器现在似乎瘫痪了,但我希望这只是暂时的 ] 和沙克对于被动协议分析也很有用 - 第一个仅针对 http,第二个 - 针对更多。

答案3

尝试響響或者贾斯尼弗

Justniffer 在 TCP 数据包重新排序重传和 IP 碎片方面表现良好

答案4

您使用的 Web 服务器不生成日志吗?这肯定是监控 HTTP 流量的更好方法,有大量工具可以分析数据,任何有能力的 Web 服务器都应该生成可靠的日志。

相关内容