使用tcpdump监视HTTP流量


42

为了监视服务器和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

E ..... @ .............. 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>

除了突出显示的部分,这几乎是完美的。这到底是什么,更重要的是,我要如何摆脱它?也许只是对命令末尾的表达式做了些微调整?

Answers:


39

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

您当然可以使用perl脚本对输出进行按摩,但是为什么不使用Wireshark的文本版本tshark呢?

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


1
谢谢-在尝试了所有建议之后,tshark似乎是完成这项工作的最佳工具。我目前正在使用“ tshark -d tcp.port == 8070,http -R'http.request或http.response'”。现在,只要我能像导线经纪人一样让tshark“跟随tcp流”(这被问了很多,但我仍然没有找到答案)。“ -V”显示有关TCP和IP数据包等的信息,这些信息我不感兴趣。但是我想我可以使用脚本删除该信息。
otto.poellath,2009年

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

18

看看的ngrep -它mighe是一些对你有用。

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


2
ngrep +1。非常有用的工具。
tylerl

ngrep和httpry看起来绝对有用,但是ngrep不知道HTTP和AFAIK,httpry仅与HTTP标头一起使用,无法显示有效载荷数据。
otto.poellath

@sapporo-可以肯定-ngrep与协议无关,但是您可以添加pcap过滤器“端口80”,并在大多数情况下仅获取http流量。
pQd

Imo,ngrep比tcpdump好100000x
Daniel W.

5

尝试httpryjustniffer

Justniffer在tcp数据包重排重传和ip分段方面效果很好


1
谢谢!justniffer就是我一直在寻找(我认为这是中提到的唯一工具,这是非常简单措施的请求,持续时间)。
gkop 2011年

1

我建议使用愚蠢的tcpdump命令行,将所有内容存储在pcap文件中以进行后期处理。根据您正在查看的内容,诊断tcpflow非常适合以一种连贯的方式将通信重新组合在一起进行分析。

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


0

您使用的网络服务器是否不会生成日志?当然,这将是监视HTTP流量的更好的方法,这里有大量的工具来分析数据,任何有能力的Web服务器都应生成可靠的日志。


4
显然。我想他已经想到了。有时监视在A点和B点之间发送的实际数据很有用
。– tylerl

0

市场上有几种专门用于监视HTTP流量的工具。Fiddler2(http://www.fiddler2.org)和HTTP Debugger Pro是此类工具的示例。


4
感谢您的建议。不幸的是,这两种工具似乎只能在Windows上使用。我没有提到它,但是我正在寻找可以在Linux上运行的东西。
otto.poellath 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.