摘自http://blog.csdn.net/howeverpf/article/details/40743705
Wireshark入门与进阶系列(二)
“君子生非异也,善假于物也”---荀子
本文由CSDN-蚍蜉撼青松 【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!
上一篇文章我们讲了使用Wireshark进行数据包捕获与保存的最基本流程,更通常的情况下,我们对于要捕获的数据包及其展示、存储可能有一定要求,例如:
- 我们希望捕获的数据包中对我们有用的包的比例要能更高,这就需要设定一些捕获的过滤规则;
- 我们希望在捕获数据包的同时将数据包保存到指定的文件中;
- 我们希望当满足某个条件时,Wireshark会自动停止抓包,而不需要我们手动停止;
- 我们希望捕获的实时展示最新捕获的数据包,并看到各类网络数据包的数量统计信息;
- 我们希望将物理层、网络层、传输层的数字地址转换成可读性更好的文字信息;
以上这些需求,都可以通过设置Capture Options来满足,故此,一个相对上一篇博文文更完整的抓包流程是:
[plain] view plain copy print?
- “启动软件-->设置捕获选项并开始抓包-->停止抓包-->数据包保存”
其他的步骤基本没变,只是把简单的“选定网卡”进化成了更为复杂的“设定捕获选项”。在这篇博文里,就让我们来了解一下这个Capture Options。
【本篇大部分内容参考Wireshark自带的帮助手册,需要却没有的可以下载《Wireshark用户指南1.10(英文原本)》,或是《Wireshark用户指南老版(中文译本)》】
二、Capture Options(捕获选项)各项的含义与设定
软件启动后,在引导界面中,我们直接点击“Capture”部分下面的Capture Options快捷按钮【第一篇博文的图2最下方】,弹出下图所示的捕获选项窗口,
图2-1 Capture Options(数据包捕获选项)弹窗
通过上图,可以看到,Capture Options弹窗根据设置内容的不同,大致可以分为五个区域【图2-1中分别用五个黑色圆角方框标注】。下面按照从上到下,从左到右的顺序,分区域依次介绍各个选项都有什么涵义,设置与否对我们有何影响。
2.1 Capture[抓包相关设定]
图2-2 数据包捕获相关设定
这个区域的选项都是会对数据包的捕获产生直接影响的,按照自上而下的顺序,具体来说他们包括,
2.1.1 网卡列表
位于此区域最上方,它的作用是显而易见的,你想在哪块网卡上抓包,就勾选该网卡前面的复选框。可多选,至少选一个!
2.1.2 选项:Capture on all interfaces
勾选此选项后,意味着你要Wireshark同时捕获本机所有网卡上的网络数据包【这和你在上方的列表中勾选了所有的网卡是等价的】;反之,则只捕获网卡列表中指定网卡上的数据包。
2.1.3 选项:Use promiscuous mode on all interfaces
勾选此选项后,意味着你要Wireshark在抓包的时候让网卡开启混杂模式。【简单点说,开启混杂模式的网卡可以捕获所有流过该网卡的帧,不开启则只能捕获广播帧以及发给该网卡的帧。更详细的关于以太网卡几种工作模式的介绍,参看《网卡的工作模式》】
2.1.4 按钮:Manage Interfaces
如果你想增、删“网卡列表”里的条目,可以点这个按钮。【其实这里面还可以设置管道以及远程网卡作为数据包来源,我也没太用这功能,就不多说了】
2.1.5 输入框与按钮:Capture Filter
如果你想设置数据包捕获的过滤条件(官方一点,好像多称为过滤器),并且你碰巧对Tcpdump的表达式还有过一点了解,你可以直接在此按钮旁边的输入框中按照语法设置过滤表达式,类似于我在图2-1中输入的:
[plain] view plain copy print?
- host 192.168.1.17 and port 110
当然,很可能你对过滤表达式完全不了解,那么你也可以直接点这个按钮,弹出下面这个窗口,里面有些现成的常用过滤器,
图2-3 Capture Filter弹窗
我们从这些可选的过滤器里任意选一条,比方说上图2-3中选中的“IP address
192.168.0.1”,可以在下方看到,“IP address
192.168.0.1”只是过滤器的一个直观、容易理解的名字,它其实对应着过滤表达式“host
192.168.0.1”。图2-3这个弹窗里已经有最简单的,包括“只要IP包”、“只要UDP包”、“只要HTTP包”、“不要ARP包”等最常用的
过滤器。利用它我们还可以增删改一些常用的过滤器,当然前提是你得学习一下怎么写过滤表达式。【由于与Tcpdump之间高度的相似性,想要学习过滤表达
式的语法,可以参考博文《Tcpdump的详细用法》,当然也可以直接下载资料《WinPcap_BPF_Fiter过滤规则设置说明文档.pdf》】
2.1.6 按钮:Compile selected BPFs
这个一开始我也没搞清楚,还以为是要让过滤器生效,必须在写好过滤表达式后点这个,所以就每次都顺手点上一记~~~也是写本文的时候才发现,不点这个也
可以生效……查阅Wireshark自带的帮助手册后明白,它只是一个帮助你把过滤表达式编译成BPF代码形式(看起来有点像汇编代码)的工具而已。你要
是只是用Wireshark,不自己编写基于WinPcap的嗅探工具,我估计应该用不到这个。
2.2 Capture Files[存包相关设定]
图2-4 数据包文件存储相关的设定
这个区域的选项仅当你想要自动存包时才需要设置。实际应用中,有些情况下只是一个简单的临时分析,是不需要存包的;也有些情况是我们先实时捕获放在缓存,先大致看过后再选择性地存文件。这两种情况下,都不用设置这个区域的选项。
2.2.1 输入框:File
简单,直接通过输入或是使用后方的Brose按钮,指定存放的文件名及其完整路径。默认是空白,意味着捕获的数据包存放在默认缓存目录下的临时文件中。
2.2.2 选项:Use pcap-ng format
勾选这个选项,意味着你希望Wireshark存文件时使用pcapng格式【欲知详情,参看http://wiki.wireshark.org/Development/PcapNg】。当同时指定在多块网卡上抓包时,必须使用pcapng格式存文件;出于兼容考虑,单块网卡上的抓包我不建议勾选。
2.2.3 选项:Use multiple files
勾选此选项后,Wireshark会使用多个文件存储数据包;反之,则默认使用单文件存储。使用单文件还是多文件,取决于数据量的大小、你的目的等多个要素。
2.2.4 选项:Next file every N megabytes(s)/minute(s)
如果上面没有勾选“Use multiple files”,则此选项被禁、无效。
使用多个文件存储时,必须指定切换下一个文件的条件。切换条件有两种形式,一是每当捕获多少流量(默认单位是Mb,也支持更小一点的Kb,以及更大一点的Gb)后切换,另一种是每当捕获间隔多长时间(默认单位分钟,也支持秒、小时、天)后切换。
使用多个文件存储时,两种切换方式至少选其一!
2.2.5 选项:Ring buffer with N files
如果上面没有勾选“Use multiple files”,则此选项被禁、无效。
使用多个文件存储时,如果对文件数量有限制,且允许文件覆盖,
可以勾选并设定此选项。这意味着,Wireshark在存包时最多创建N个文件,当达到切换条件需要创建第N+1个文件时,它会直接把捕获的数据包存入到
当前最“老”(生成时间最早)的文件中,从而让最“老”的文件变成最“新”的文件。这就好比建立了一个容量为N的环形缓冲队列。
暂时来说,我的理解,让最“老”的文件变成最“新”的文件的过程是覆盖的过程,如果你倒腾发现本质上是添加或其他机理,请联系我!
2.2.6 选项:Stop capture after n file(s)
如果上面没有勾选“Use multiple files”,则此选项被禁、无效。
使用多个文件存储时,如果对文件数量有限制,且不允许文件覆盖,可以勾选并设定此选项。这意味着,Wireshark在存包时最多创建N个文件,当达到切换条件需要创建第N+1个文件时,它就直接停止抓包。
这种自动停止抓包的方法仅适用于指定使用多个文件存储时。通用的自动停止抓包方法在下一节介绍。
2.3 Stop Capture Automatically After[自动停止抓包设定]
图2-5 自动停止抓包设定
在上一篇文章里,我们是手动停止抓包的。而这个区域的选项可以帮助我们通过设置一些条件来让Wireshark自动停止抓包,需要额外提到的是,这些选项之间不是互斥的,可以勾选多个,他们之间应该是“或”的关系。
2.3.1 选项:N packet(s)
勾选此选项后,Wireshark会在捕获到指定个数的数据包后,会自动停止抓包。
2.3.2 选项:N megabytes(s)
勾选此选项后,Wireshark会在捕获到指定大小的数据流量后,会自动停止抓包。默认流量单位是Mb,也支持更小一点的Kb,以及更大一点的Gb。
2.3.3 选项:N minute(s)
勾选此选项后,Wireshark会以开始捕获为计时起点,经过指定长短的时间后,自动停止抓包。默认时间单位分钟,也支持秒、小时、天。
2.4 Display Options[显示选项设定]
图2-6 显示选项设定
这个区域的选项用来对实时捕获的展示效果施加影响。
2.4.1 选项:Update list of packets in real time
勾选这个选项,会使得Wireshark在抓包时同时开启两个进(线)程,一个进(线)程负责捕获数据包,另一个进(线)程负责实时地解析、展示捕获的数据包;反之,Wireshark就会“一心一意”地抓包,等到停止抓包后,再一次性解析、展示所有捕获的数据包。
显然的是,实时地解析、展示数据包,或多或少都会消耗CPU资源,所以会对捕获性能产生不小的影响,丢包率可能会因此而增大。
2.4.2 选项:Automatic scrolling in live capture
如果上面没有勾选“Update list of packets in real time”,则此选项被禁、无效。
勾选这个选项,会使得Wireshark在开始抓包后,将主窗口中的“数据包列表”子窗口自动滚动到最后一行,以便你随时都能在该子窗口的最底部看到最新捕获的数据包。其实你要是不勾选,自己手动拖一下该子窗口的滚动条也是一样的。
2.4.3 选项:Hide capture info dialog
如果你想对Wireshark抓包时的数据包捕获情况做个大概的了解,那么不要勾选这个选项,Wireshark在抓包的时候会弹出下图所示的概要信息窗口,
图2-7 数据包捕获概要情况弹窗
反之,勾选此选项后,Wireshark则会在抓包时隐藏此弹窗。
2.5 Name Resolution[名称解析相关设定]
图2-8 名称解析相关设定
这个区域的选项用来对展示捕获结果时数据包各层的地址解析、显示效果作出设定。需要说明的是,这些解析结果只是临时性的,如果你把捕获的数据包存下来,Wireshark只会保存最原始的各层地址,而不会保存这些解析结果。
2.5.1 选项:Resolve Mac addresses
勾选此选项后,Wireshark会尝试(但不保证)将MAC地址解析成更易识别的形式,例如:
[plain] view plain copy print?
- 01:00:5e:00:35:16 ==> IPv4mcast_00:35:16
- 00:26:82:88:45:ac ==> GemtekTe_88:45:ac
- 28:c6:8e:19:e9:5b ==> Netgear_19:e9:5b
仔细观察一下,你很容易发现,它其实只解析了MAC地址的前三个字节,后三个字节原封不动的保留在了解析结果里。这种解析的理论依据是,六字节的MAC地址其实可以对半分为两部分:前三个字节由IEEE的注册管理机构统一分配,称为OUI(组织唯一标识符)或是Company_id(公司标识符),一般可以通过这三个字节识别出生产厂商;后三个字节由厂商自行分配,意义不大。
2.5.2 选项:Resolve network-layer names
勾选此选项后,Wireshark会尝试(但不保证)将网络层地址(一般就是IP地址)解析成更易识别的形式(例如域名、主机名)。
它的实现一般是通过调用gethostname()的反向域名查询【参看《DNS中的正向解析与反向解析》】形式,这可能导致两个问题:1.会因查询产生额外的DNS流量,在某些分析过程中,会影响分析结果的准确性;2.会因查询占用系统资源而导致捕获性能受到影响。所以我不建议抓包的时候勾选这个选项,分析的时候可以设置这个。
如果采用普通的阻塞式查询,很多时候会因为查询失败,或是查询比较困难而导致延时等待,从而愈加影响捕获的性能。一定要用的话,最好采用concurrent DNS(同步DNS查询)。
2.5.3 选项:Resolve transport-layer name
勾选此选项后,Wireshark会尽可能(但不保证)将传输层地址(一般就是端口号)解析成其对应的应用层服务。例如:
[plain] view plain copy print?
- 80、8080 ==> http
- 21 ==> ftp
- 23 ==> telnet
- 25 ==> smtp
- 53 ==> dns
- 110 ==> pop3
- 443 ==> ssl、tls
这种解析的原理在于,很多常用的服务往往绑定固定的端口号(0~1023),这些端口号一般称为熟知端口号或是系统端口号。【可以参看维基百科
--- TCP/UDP端口列表】
2.5.4选项:Use external network name resolver
Wireshark早期版本中没有这个选项及其近似选项。在实际使用中,我个人还没机会体会到这个选项勾选与否的区别;我在的1.10版自带用户指南上也没有找到相关的描述。最后搜了一下,大概弄懂了一点。
添加这个选项的初衷,应该是配合上面的选项“Resolve network-layer
names”使用。我们知道,普通的DNS查询遵循的是本机缓存查询、hosts文件查询、外部查询的先后顺序,如果前两项内部查找失败,就会用到外部查
询,但若是不勾选这个选项,那么Wireshark在解析IP地址对应的主机名或域名的时候,就仅使用内部的查询,失败的话不再尝试外部查询,直接返回失败的结果。
初衷虽是如此,但在实现的时候貌似出了点问题……
本节参考资料:
- 《What is "Use External Network Name Resolver" setting?》
- 《Doesn‘t respect disabling "use an external network name resolver"》
- 《Using a Wireshark Hosts File for Quicker Analysis》(可能打不开,可以看这个保存的图片:http://vdisk.weibo.com/s/aUCQJfkRisFHX)