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

发表于:2013-1-16 10:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:曼红    来源:TaoBao QA Team

  众所周知,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数据包的头信息。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号