Wireshark入门与进阶系列

Posted LiuYanYGZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wireshark入门与进阶系列相关的知识,希望对你有一定的参考价值。

摘自http://blog.csdn.net/howeverpf/article/details/40743705

Wireshark入门与进阶系列(二)

“君子生非异也,善假于物也”---荀子

本文由CSDN-蚍蜉撼青松 【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!


       上一篇文章我们讲了使用Wireshark进行数据包捕获与保存的最基本流程,更通常的情况下,我们对于要捕获的数据包及其展示、存储可能有一定要求,例如:
  • 我们希望捕获的数据包中对我们有用的包的比例要能更高,这就需要设定一些捕获的过滤规则;
  • 我们希望在捕获数据包的同时将数据包保存到指定的文件中;
  • 我们希望当满足某个条件时,Wireshark会自动停止抓包,而不需要我们手动停止;
  • 我们希望捕获的实时展示最新捕获的数据包,并看到各类网络数据包的数量统计信息;
  • 我们希望将物理层、网络层、传输层的数字地址转换成可读性更好的文字信息;

       以上这些需求,都可以通过设置Capture Options来满足,故此,一个相对上一篇博文文更完整的抓包流程是:

  1. “启动软件-->设置捕获选项并开始抓包-->停止抓包-->数据包保存”  

      其他的步骤基本没变,只是把简单的“选定网卡”进化成了更为复杂的“设定捕获选项”。在这篇博文里,就让我们来了解一下这个Capture Options。

      【本篇大部分内容参考Wireshark自带的帮助手册,需要却没有的可以下载《Wireshark用户指南1.10(英文原本)》,或是《Wireshark用户指南老版(中文译本)》】


二、Capture Options(捕获选项)各项的含义与设定

      软件启动后,在引导界面中,我们直接点击“Capture”部分下面的Capture Options快捷按钮【第一篇博文的图2最下方】,弹出下图所示的捕获选项窗口,

Capture Options

图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中输入的:

  1. 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地址解析成更易识别的形式,例如:
  1. 01:00:5e:00:35:16 ==> IPv4mcast_00:35:16  
  2. 00:26:82:88:45:ac ==> GemtekTe_88:45:ac  
  3. 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会尽可能(但不保证)将传输层地址(一般就是端口号)解析成其对应的应用层服务。例如:
  1. 80、8080 ==> http  
  2. 21 ==> ftp  
  3. 23 ==> telnet  
  4. 25 ==> smtp  
  5. 53 ==> dns  
  6. 110 ==> pop3  
  7. 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地址对应的主机名或域名的时候,就仅使用内部的查询,失败的话不再尝试外部查询,直接返回失败的结果
        初衷虽是如此,但在实现的时候貌似出了点问题……
        本节参考资料:

以上是关于Wireshark入门与进阶系列的主要内容,如果未能解决你的问题,请参考以下文章

SSIS入门与进阶

Altium Designer入门与进阶教程系列

Altium Designer入门与进阶教程系列

C语言学习,从入门到进阶系列

C语言学习,从入门到进阶系列

「算法与数据结构」从入门到进阶整理推荐书单