• 1. Wireshark抓包工具使用分享产品开发一部 前端开发室 钟和民 2012-8-28
  • 2. 内容纲要Wireshark 简介 Wireshark常用功能 抓包,停止抓包 保存抓包 设置抓包选项 捕捉过滤器 显示过滤器 Follow TCP Stream 实际应用案例
  • 3. Wireshark简介网络抓包分析工具 可实时捕捉多种网络接口 支持其他程序抓包保存文件,例如TCPDump 开源软件,采用GPL授权 支持UNIX和Windows平台
  • 4. Wireshark简介发展简史: 1998年由Gerald Combs 完成第一个Ethereal(Wireshark前身)版本的开发。 此后不久,Gilbert Ramirez发现它的潜力,并为其提供了底层分析 1998年10月,Guy Harris正寻找一种比TcpView更好的工具,他开始为Ethereal进行改进,并提供分析。
  • 5. Wireshark简介1998年以后,正在进行TCP/IP教学的Richard Sharpe 关注了它在这些课程中的作用。并开始研究该软件是否他所需要的协议。如果不行,新协议支持应该很方便被添加。所以他开始从事Ethereal的分析及改进。 从那以后,帮助Ethereal的人越来越多,他们的开始几乎都是由于一些尚不被Ethereal支持的协议。所以他们拷贝了已有的解析器,并为团队提供了改进回馈。 2006年重新命名为Wireshark.
  • 6. Wireshark简介支持的系统: Windows APPle Mac OSX Debian GNU/Linux FreeBSD NetBSD OpenPKG Red Hat Fedora/Enterprise Linux ……
  • 7. Wireshark简介官方网站: http://www.wireshark.org/ 维基网站地址: http://wiki.wireshark.org/ 中文用户手册: http://man.lupaworld.com/content/network/wireshark/index.html
  • 8. Wireshark简介主界面
  • 9. Wireshark常用功能 可通过Capture菜单中的Interfaces打开网卡列表,然后点击网卡右边的“Start”按钮开始抓包。或者单击工具栏的第一个按钮,和单击Capture->Interfaces的效果一样。
  • 10. Wireshark常用功能 开始抓包后,Wireshark的主界面中会以不同的颜色显示抓取到的不同的数据包。 如果要停止抓包,可通过工具栏中的Stop按钮,或者Capture->Stop菜单项停止抓包。
  • 11. Wireshark常用功能 停止抓包后我们可以将抓取到的数据包保存到文件供日后分析使用。 可通过菜单File->Save(Save As) 或者工具栏上的保存按钮。
  • 12. Wireshark常用功能抓包模式 在开始抓包之前还可修改Wireshark的抓包选项。通过工具栏或者菜单Capture->Options 打开抓包选项设置界面。 这里可以设置很多选项,我们这里介绍一下 混杂模式 和 非混杂模式。 混杂模式:抓取经过网卡的所有数据包,包括发往本网卡和非发往本网卡的。 非混杂模式:只抓取目标地址是本网卡的数据包,对于发往别的主机而经过本网卡的数据包忽略。 如左图中显示的是 混杂模式
  • 13. Wireshark常用功能 由于Wireshark是将抓包数据保存在内存当中,当抓包时间比较长,抓的包比较多时可能出现内存不够用的情况。此时我们设置使用多个文件保存抓包数据就可避免这种情况。 多个文件保存的方式可以是 每隔多久保存一个文件,也可以是 限制每个文件保存的大小,同时也可以设置限制文件个数。 默认情况下Wireshark是只使用一个临时文件来保存抓包数据的。多文件自动保存抓包数据
  • 14. Wireshark常用功能自动停止抓包 在无人值守情况下,我们可设置在某些条件下自动停止抓包。这些条件可以是: 抓到多少包之后; 抓到多大数据量之后(存储容量); 抓取多少分钟之后
  • 15. Wireshark常用功能过滤器 在Wireshark中有两种过滤器。 捕捉过滤器:在抓包之前设置,让Wireshark只抓取过滤器指定的包。 显示过滤器:在桌包之前或者完成抓包之后都可,不影响抓包,只是方便查看。
  • 16. Wireshark常用功能捕捉过滤器例子: [src|dst] host 主机过滤 src host 192.168.20.159 捕捉源IP地址是192.168.20.159的包。 dst host 192.168.20.159 捕捉目标IP地址是192.168.20.159的包。 host 192.168.20.159 捕捉源IP或者目标IP是192.168.20.159的包。   [tcp|udp] [src|dst] port 端口过滤 host 192.168.20.159 and tcp port 9990 捕捉源/目标IP地址是192.168.20.159,源/目标 端口是TCP 9990端口的数据包。
  • 17. Wireshark常用功能Protocol(协议): 可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. 如果没有特别指明是什么协议,则默认使用所有支持的协议。   Direction(方向): 可能的值: src, dst, src and dst, src or dst 如果没有特别指明来源或目的地,则默认使用 “src or dst” 作为关键字。 例如,”host 10.2.2.2″与”src or dst host 10.2.2.2″是一样的。 捕捉过滤器
  • 18. Wireshark常用功能Host(s): 可能的值: net, port, host, portrange. 如果没有指定此值,则默认使用”host”关键字。 例如,”src 10.1.1.1″与”src host 10.1.1.1″相同。   Logical Operations(逻辑运算): 可能的值:not, and, or. 否(“not”)具有最高的优先级。或(“or”)和与(“and”)具有相同的优先级,运算时从左至右进行。 例如, “not tcp port 3128 and tcp port 23″与”(not tcp port 3128) and tcp port 23″相同。 “not tcp port 3128 and tcp port 23″与”not (tcp port 3128 and tcp port 23)”不同。捕捉过滤器
  • 19. Wireshark常用功能显示过滤器例子: http 显示TCP 80端口的http包。 tcp.port == 9990 显示tcp 端口是9990的包。 tcp.flags.reset == 1 显示tcp标志字段中reset标志为1的包。 tcp.port==80 or tcp.port==9990 显示端口是80或者9990的包显示过滤器
  • 20. Wireshark常用功能Protocol(协议): 可以使用大量位于OSI模型第2至7层的协议。点击”Expression…”按钮后,可以看到它们。 比如:IP,TCP,DNS,SSH。 String1, String2 (可选项): 协议的子类。 点击相关父类旁的”+”号,然后选择其子类。显示过滤器
  • 21. Wireshark常用功能Comparison operators (比较运算符)例如: tcp.port==9990 过滤显示TCP端口是9990的数据包。 Tcp.seq eq 115 过滤显示序列号为115的数据包。 ……
  • 22. Wireshark常用功能Logical e­xpressions(逻辑运算符)例如: tcp.port== 9990 or tcp.port== 9991 过滤显示TCP端口是9990或者9991的包。 !(ip.src == 180.149.135.236) 过滤显示源IP地址不是180.149.135.236的数据包。 ……
  • 23. Wireshark常用功能 如果是在抓取和分析基于TCP协议的包,从应用层的角度查看TCP流的内容有时是非常有用的。要查看TCP流的内容,只需要选中其中的任意一个TCP包,选择右键菜单中的“Follow tcp stream”即可。 Follow TCP Stream
  • 24. Wireshark常用功能 这里有一个技巧可以比较简单方便的查看到每一个TCP连接流的内容: 一. 我们通过显示过滤器tcp.flags.syn==1 and tcp.flags.ack != 1 将所抓包的建立每个TCP连接的第一个包给过滤出来。 二 . 在每个单独的包上面执行“Follow TCP Stream”。 三 . 回到显示过滤器重新选择第一步中的过滤器,再对其他的包执行第二步。 Follow TCP Stream
  • 25. 实际应用案例2010年底到2011年初一段时间公司组织客户端,服务端,运维等对网盘上传失败率较高的原因进行了深入调查分析,找出了很多网络和程序上的问题,这个是其中的一个案例。 问题现象: 彩讯深圳办公室的网盘或者超大附件采用控件上传经常在中途失败。彩讯深圳办公室内网 深信服防火墙 阻断分布式上传的案例
  • 26. 实际应用案例调查分析的大致过程是: 1 抓包发现在上传失败时,有较多RST包关闭连接,RST包是TCP标志位reset志为1的包。以下几种情况可能导致出现RST包: (1).connect一个不存在的端口。 (2).send一个已经关掉的连接。 (3).采用shutdown立即关闭一个已经建立的连接。 显然现在属于第三中情况,而且RST包的源IP地址都是服务器的IP地址,说明是“服务器”主动关闭连接。
  • 27. 实际应用案例2 查看服务器端的日志及抓包看什么原因导致其关闭连接,发现服务器并没有主动关闭连接。 3 倒回来对客户端的抓包进一步进行分析,对RST包的IP层的TTL进行对比发现其TTL值为127,而其他从服务器发过来的正常包的TTL值是117,明显大很多,说明其经过的路由器跳转少很多,而如果服务器的默认TTL值是128的话,说明这种RST包只经过了一跳就被发送到客户端,所以很有可能是内网网关或者防火墙所为。
  • 28. 实际应用案例
  • 29. 实际应用案例
  • 30. 实际应用案例 于是找公司网管确认并查看防火墙日志,果然防火墙日志中有对这些连接进行关闭的记录,原因是这些连接被防火墙判定为P2P软件。 至于为什么判定为P2P软件原因可能是 (1)分布式的TCP上传采用了非80的特殊端口9990和9991; (2)控件上传采用多线程,对于同一个端口同时存在多个连接进行上传; (3)上传数据量或者时间达到了防火墙的阀值,当上传少量数据在短时间内可完成上传时,防火墙不会有关闭连接的行为; 所以后来控件上传也进行了改进,在原有TCP 9990和9991端口上传的基础上,增加了fcgi的http 80端口上传,并且能够自动动态切换,线程数也可根据网络情况自动动态调整。
  • 31. 实际应用案例工具不是最重要,熟悉协议更重要
  • 32. (本页无文本内容)