tcpdump+wireshark配合抓包并分析数据

下午调试crawlermanager时,成同学反映:client发送的command包,有些没有收到响应。但是查我这边的日志显示是已经发送响应包了的。

不放心,就使用tcpdump抓了一下包,然后使用wireshark进行分析,成功定位了问题。

 

(1)运行tcpdump:

tcpdump -s 0 -c 100 dst host 109.119.20.82 -w ./target.cap

相关解释:

(1)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(2)-c 100 : 只抓取100个数据包
(3)dst host 109.119.20.82 : 只抓取发送到109.119.20.82上的包
(4)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

更多参见:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

 

(2)使用wireshark打开target.cap:

 

然后逐个包分析。

 

终于,在一个包中发现如下情况:

 

按照我们规定的通信协议:头四个字节 00 00 00 2d表示该包body的长度,但实际抱得长度远远超出了该值!从内容看,是将多个包的内容合并到一个包一起发送了!

这就是tcp协议中经典的“粘包”问题,本来客户端是已经处理了该问题,但由于实现的bug,导致客户端在处理完第一个包后就丢弃了其他内容,于是客户端就出现了:“丢失响应包”的情况了。

posted @ 2012-11-15 17:50    阅读(1510)  评论(0编辑  收藏  举报