您的位置:首页 > 理论基础 > 计算机网络

tcpdump与wireshark在测试中过程中的使用

2014-02-24 12:16 351 查看


楼主雨点<27626078>2013-01-19 15:42:35 发表在测试资源 296人浏览 3人参与

LV8众所周知,tcpdump是linux/unix系统中最常用的网络抓包工具,针对特定网卡监视网络数据包的传递方向,并输出数据包的报文头信息,为网络环境中数据包分析工作强大的支持。而通过wireshark则可方便地对tcpdump抓取的包进行进一步的筛选、分析。在测试通讯类的系统尤其是测试分布式系统,tcpdump工具也能给我们测试同学带来相当大的便利。我们曾经多次通过这种方式帮助测试验证case,帮助线上排查异常情况。这里我首先简单介绍一下tcpdump基本的用法。在默认情况下,tcpdump将监视第一个网络接口上所有流过的数据包,比如eth0或en0。当然我们也可以监视指定网络接口的数据包。如执行以下命令:sudo /usr/sbin/tcpdump -i eth0 tcp

从以上输出内容的第一行中可以看出,当前tcpdump监听eth0,10MB以太网接口。截取TCP数据包输出的内容格式为:时间 数据包类型 src>dst : Flags(TCP数据包的标识信息), seqno(数据包的序列号), ackno(下次发送数据包时的序列号), win缓存窗口大小, urgent, OPTIONS在上面的截图输出内容格式中无urgent,urgent一般用于telnet及Rlogin,这里暂且不做介绍。通过上面截取数据包的结果内容,我们可以很清晰地看到数据包的传递方向。执行sudo /usr/sbin/tcpdump -i eth0 tcp命令时,会输出所有经由eth0网络接口传输的TCP数据包头信息,然而在测试分布式系统时,往往只会关注某几台服务器与特定客户端之间的数据交互信息。因此,我们需要设置条件以使tcpdump筛选输出我们所关注的数据包信息。在设置条件时,我们可以使用含逻辑运算的条件表达式,以使tcpdump输出的结果尽可能得符合我们期望。在设置条件表达式之前,先看一下几个tcpdump常用的过滤条件。● tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型● -i eth0:只抓经过接口eth0的包● -c 100:只抓取100个数据包● -s 0:抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包● -t:不显示时间戳● dst port 8080:抓取目标端口是8080的数据包(dst port ! 22 : 不抓取目标端口是22的数据包)● src net 10.232.16.8/9:数据包的源网络地址为10.232.16.8/9● -w ./test.cap:保存成cap文件,方便用wireshark分析下面通过几个简单的例子来说明几个最常用的使用方式:sudo /usr/sbin/tcpdump -i eth0 and src host 10.232.20.171 and dst 10.232.22.80

表示截取经由eth0网络接口,由10.232.20.171向10.232.22.80发送的所有数据包的头信息。sudo /usr/sbin/tcpdump -i eth0 tcp port 8080 and src host 10.232.20.171 and not dst 10.232.22.80

表示截取经由eth0网络接口,由10.232.20.171向除10.232.22.81以外的主机发送的且端口号为8080的TCP数据包的头信息。访问分布式的WEB系统为例。用java编写HTTP客户端 ,以轮询的方式访问部署两台服务器上的web应用 (web应用的端口号为8080)。web应用所有的服务器IP分别为10.232.22.80和10.232.22.81;客户端所在服务器的地址为10.232.26.122。sudo /usr/sbin/tcpdump -i eth0 tcp port 8080 and src host 10.232.26.122 and dst host 10.232.22.80 or dst host 10.232.22.81

通过上面的输出结果可以很直观地看到,客户端在某个时间点发送的请求到达服务器的IP,以及HTTP请求中所包含的OPTIONS信息,省去在日志中搜索发送HTTP请求的目标服务器。PS:有关于tcpdump的详细参数信息,可在linux 或 unix 系统中执行man tcpdump获取 。另外,当我们进行稳定性测试或者在线上排查异常问题时,我们也可以可以将tcpdump输出的信息保存到文件中,然后再通过诸如wireshark,fiddler,smsniffer等网络数据分析工具进行分析。我暂且简单介绍一下通过wireshark工具对传送的报文进行分析的方法。sudo /usr/sbin/tcpdump -i eth0 –w test.cap。在wireshark打开后,即可看到抓取的数据包。如图所示

sudo /usr/sbin/tcpdump –i eth2 tcp and src 10.232.17.151 and dst 10.232.16.9 –w 1.cap,使用wireshark打开1.cap文件。

由图可看出,选中一个package时,wireshark会解析其各个组成部分,并与二进制报文相对应。在wireshark中,还能对package进行进一步地筛选。如我们希望筛选tcp标志为[PSH,ACK]的package:

结果如下:

在图中的数据区域中,wireshark会对二进制数据进行解码,从右侧解码后的报文内容中可以很直观地看出,此数据包为心跳包。可见使用tcpdump+wireshark对于通信类应用的测试,可以方便地筛选目标报文,并过滤出测试过程中所需的报文数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: