使用tcpdump监视HTTP通信

要监视服务器和Web服务器之间的HTTP通信,我正在使用tcpdump 。 这工作正常,但我想摆脱输出中的一些多余的数据(我知道tcpflowwireshark ,但他们不是在我的环境中随时可用)。

tcpdump手册页:

打印所有来自端口80的HTTP 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 and tcp port 80 and(((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,win 4316,options [nop,nop,TS val 4093273405 ecr 869959372],length 727

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

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

除了突出的部分,这几乎是完美的。 这是什么,结束 – 更重要的是,我该如何摆脱它? 也许这只是对命令结尾处的expression做一些调整?

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

    你当然可以用perl脚本来按摩输出,但是为什么不使用tshark,而是wireshark的文本版本呢?

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

    它采用与tcpdump相同的参数(相同的库),但由于它是一个分析器,它可以做深度包检测,所以你可以更精确的filter,即

    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"'

    看看ngrep – 它mighe对你有一些用处。

    作为其他人的参考httpry [服务器似乎现在倒了,但我希望它是暂时的]和tshark也被用于被动协议分析 – 第一个只为HTTP,第二 – 更多。

    尝试httpry或justniffer

    Justniffer在重新sorting重新传输和IP碎片的tcp数据包上运行良好

    我会build议使用笨拙的tcpdump命令行,将所有内容都存储在pcap文件中以便后期处理。 根据您正在查看的内容,诊断tcpflow非常适合将通信以一致的方式放在一起进行分析。

    其他一些好的信息,包括httpry的一些用法可以在以下urlfind: http ://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html

    您使用的networking服务器是否生成日志? 当然,这将是一个更好的方式来监视HTTPstream量,有大量的工具来分析数据和任何有能力的networking服务器应该产生可靠的日志。

    市场上有几种专门用于监控HTTPstream量的工具。 Fiddler2( http://www.fiddler2.org )和HTTP Debugger Pro就是这样的工具的例子。