WireShark使用教程

工具说明:windows

 抓包工具 Wireshark, 用来获取网络数据封包,包括 HTTP、TCP、UDP 等网络协议包。wireshark是开源软件,能够放心使用。 能够运行在WindowsMac OS上。浏览器

   wireshark只能查看封包,而不能修改封包的内容,或者发送封包。缓存

Wireshark VS Fiddler安全

   Fiddler是在windows上运行的程序,专门用来捕获HTTP,HTTPS的。wireshark能获取HTTP,也能获取HTTPS,可是不能解密HTTPS,因此wireshark看不懂HTTPS中的
   内容。总结,若是是处理HTTP,HTTPS 仍是用Fiddler,  其余协议好比TCP,UDP 就用wireshark。
   同类的其余工具:微软的 network monitorsniffer

开始抓包服务器

 wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你须要选择一个网卡。网络

    点击Caputre->Interfaces.. 出现下面对话框,选择正确的网卡。而后点击”Start”按钮, 开始抓包。tcp

    点击接口名称以后,就能够看到实时接收的报文。Wireshark会捕捉系统发送和接收的每个报文。若是抓取的接口是无线而且选项选取的是混合模式,那么也会看到网络上      其余报文。上端面板每一行对应一个网络报文,默认显示报文接收时间(相对开始抓取的时间点),源和目标IP地址,使用协议和报文相关信息。点击某一行能够在下面两个      窗口看到更多信息。“+”图标显示报文里面每一层的详细信息。底端窗口同时以十六进制和ASCII码的方式列出报文内容。函数

 须要中止抓取报文的时候,点击左上角的中止按键:工具

 色彩标识:性能

  进行到这里已经看到报文以绿色,蓝色,黑色显示出来。Wireshark经过颜色让各类流量的报文一目了然。
  好比默认绿色是TCP报文,深蓝色是DNS,浅蓝是UDP,黑色标识出   有问题的TCP报文——好比乱序报文。

  

   报文样本

   好比说你在家安装了Wireshark,但家用LAN环境下没有感兴趣的报文可供观察,那么能够去Wireshark wiki下载报文样本文件

   打开一个抓取文件至关简单,在主界面上点击Open并浏览文件便可。也能够在Wireshark里保存本身的抓包文件并稍后打开

   

   过滤报文:

   若是正在尝试分析问题,好比打电话的时候某一程序发送的报文,能够关闭全部其余使用网络的应用来减小流量。

   但仍是可能有大批报文须要筛选,这时要用到Wireshark过滤器。

   最基本的方式就是在窗口顶端过滤栏输入并点击Apply(或按下回车)。例如,输入“dns”就会只看到DNS报文。输入的时候,Wireshark会帮助自动完成过滤条件。

 也能够点击Analyze菜单并选择Display Filters来建立新的过滤条件。

  

  另外一件颇有趣的事情是你能够右键报文并选择Follow TCP Stream

  你会看到在服务器和目标端之间的所有会话。

 关闭窗口以后,你会发现过滤条件自动被引用了——Wireshark显示构成会话的报文。

 

 检查报文:

  选中一个报文以后,就能够深刻挖掘它的内容了。

  也能够在这里建立过滤条件——只需右键细节并使用Apply as Filter子菜单,就能够根据此细节建立过滤条件

  

   Wireshark是一个很是之强大的工具,网络专家用它来debug网络协议实现细节,检查安全问题,网络协议内部构件等等

   WireShark 主要分为这几个界面

   1. Display Filter(显示过滤器),  用于过滤

   2. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不一样,表明

   3. Packet Details Pane(封包详细信息), 显示封包中的字段

   4. Dissector Pane(16进制数据)

   5. Miscellanous(地址栏,杂项)

  

  过滤器有两种:

  一种是显示过滤器,就是主界面上那个,用来在捕获的记录中找到所须要的记录

  一种是捕获过滤器,用来过滤捕获的封包,以避免捕获太多的记录。 在Capture -> Capture Filters 中设置

  过滤表达式的规则

  1. 协议过滤,好比TCP,只显示TCP协议。

  2. IP 过滤,好比 ip.src ==192.168.1.102 显示源地址为192.168.1.102,ip.dst==192.168.1.102, 目标地址为192.168.1.102

  3.端口过滤,好比 tcp.port ==80,  端口为80的

  4. Http模式过滤,好比 http.request.method==”GET”,   只显示HTTP GET方法的。

  5. 逻辑运算符为 AND/ OR

  封包列表(Packet List Pane)

  封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你能够看到不一样的协议用了不一样的颜色显示。

  你也能够修改这些显示颜色的规则,  View ->Coloring Rules.

  封包详细信息 (Packet Details Pane)

  这个面板是咱们最重要的,用来查看协议中的每个字段。

  各行信息分别为

  Frame:物理层的数据帧概况

  EthernetII:数据链路层以太网帧头部信息

  Internet Protocol Version 4:互联网层IP包头部信息

  Transmission Control Protocol:传输层T的数据段头部信息,此处是TCP

  Hypertext Transfer Protocol:应用层的信息,此处是HTTP协议

TCP:

TCP/IP经过三次握手创建一个链接。这一过程当中的三种报文是:SYN,SYN/ACK,ACK。

第一步是找到PC发送到网络服务器的第一个SYN报文,这标识了TCP三次握手的开始。

若是你找不到第一个SYN报文,选择Edit -> Find Packet菜单选项。选择Display Filter,输入过滤条件:tcp.flags,这时会看到一个flag列表用于选择。选择合适的flag,tcp.flags.syn而且加上==1。点击Find,以后trace中的第一个SYN报文就会高亮出来了。

 

注意:Find Packet也能够用于搜索十六进制字符,好比恶意软件信号,或搜索字符串,好比抓包文件中的协议命令。

一个快速过滤TCP报文流的方式是在Packet List Panel中右键报文,而且选择Follow TCP Stream。这就建立了一个只显示TCP会话报文的自动过滤条件。

这一步骤会弹出一个会话显示窗口,默认状况下包含TCP会话的ASCII代码,客户端报文用红色表示,服务器报文则为蓝色。

HTTP

当HTTP发送初始GET命令以后,TCP继续数据传输过程,接下来的连接过程当中HTTP会从服务器请求数据并使用TCP将数据传回客户端。传送数据以前,服务器经过发送HTTP  OK消息告知客户端请求有效。若是服务器没有将目标发送给客户端的许可,将会返回403 Forbidden。若是服务器找不到客户端所请求的目标,会返回404。

若是没有更多数据,链接可被终止,相似于TCP三次握手信号的SYN和ACK报文,这里发送的是FIN和ACK报文。当服务器结束传送数据,就发送FIN/ACK给客户端,此报文表示结束链接。接下来客户端返回ACK报文而且对FIN/ACK中的序列号加1。这就从服务器端终止了通讯。要结束这一过程客户端必须从新对服务器端发起这一过程。必须在客户端和服务器端都发起并确认FIN/ACK过程。

基本IO Graphs:

IO graphs是一个很是好用的工具。基本的Wireshark IO

graph会显示抓包文件中的总体流量状况,一般是以每秒为单位(报文数或字节数)。默认X轴时间间隔是1秒,Y轴是每一时间间隔的报文数。若是想要查看每秒bit数或byte数,点击“Unit”,在“Y

Axis”下拉列表中选择想要查看的内容。这是一种基本的应用,对于查看流量中的波峰/波谷颇有帮助。要进一步查看,点击图形中的任意点就会看到报文的细节。

过滤:

每个图形均可以应用一个过滤条件。这里建立两个不一样的graph,一个HTTP一个ICMP。能够看到过滤条件中Graph 1使用“http”Graph 2使用“icmp”。图中能够看到红色ICMP流量中有些间隙,进一步分析。

过滤

经常使用排错过滤条件:

对于排查网络延时/应用问题有一些过滤条件是很是有用的:

tcp.analysis.lost_segment:代表已经在抓包中看到不连续的序列号。报文丢失会形成重复的ACK,这会致使重传。

tcp.analysis.duplicate_ack:显示被确认过不止一次的报文。大凉的重复ACK是TCP端点之间高延时的迹象。

tcp.analysis.retransmission:显示抓包中的全部重传。若是重传次数很少的话仍是正常的,过多重传可能有问题。这一般意味着应用性能缓慢和/或用户报文丢失。

tcp.analysis.window_update:将传输过程当中的TCP window大小图形化。若是看到窗口大小降低为零,这意味着发送方已经退出了,并等待接收方确认全部已传送数据。这可能代表接收端已经不堪重负了。

tcp.analysis.bytes_in_flight:某一时间点网络上未确认字节数。未确认字节数不能超过你的TCP窗口大小(定义于最初3此TCP握手),为了最大化吞吐量你想要得到尽量接近TCP窗口大小。若是看到连续低于TCP窗口大小,可能意味着报文丢失或路径上其余影响吞吐量的问题。

tcp.analysis.ack_rtt:衡量抓取的TCP报文与相应的ACK。若是这一时间间隔比较长那可能表示某种类型的网络延时(报文丢失,拥塞,等等)。

函数:

IO Graphs有六个可用函数:SUM, MIN, AVG, MAX, COUNT, LOAD。

MIN( ), AVG( ), MAX( )

首先看一下帧之间的最小,平均和最大时间,这对于查看帧/报文之间的延时很是有用。咱们能够将这些函数结合“frame.time_delta过滤条件看清楚帧延时,并使得往返延时更为明显。若是抓包文件中包含不一样主机之间的多个会话,而只想知道其中一个pair,可将“frame.time_delta”结合源和目标主机条件如“ip.addr==x.x.x.x &&ip.addr==y.y.y.y”。以下图所示:

函数

咱们作了如下步骤:

将Y轴设置为“Advanced”,让Caculation域可见。不作这一步就看不到计算选项。

X轴时间间隔1秒,因此每一个柱状图表明1秒间隔的计算结果。

过滤出两个特定IP地址的HTTP会话,使用条件:“(ip.addr==192.168.1.4&& ip.addr==128.173.87.169) && http”。

使用3个不一样的graph,分别计算Min(), Avg(), Max()。

对每个计算结果应用条件“frame.time_delta”,将style设置成“FBar”,显示效果最佳。

Count( ):此函数计算时间间隔内事件发生的次数,在查看TCP分析标识符时颇有用,例如重传。

Sum( ):该函数统计事件的累加值。有两种常见的用例是看在捕获TCP数据量,以及检查TCP序列号。

协议过滤器:

arp:显示全部包括ARP请求和回复在内的全部ARP数据流。

ip:显示内含IPv4头在内的(如ICMP目的地址不可达报文,在ICMP报文头以后返回到来方向的IPv4头)IP数据流。

ipv6:显示全部IPv6数据流,包括内含IPv6报文头的IPv4报文,如6to4,Teredo,以及ISATAP数据流。

tcp:显示全部基于TCP的数据流。

应用过滤器:

bootp:显示全部DHCP数据流(基于BOOTP)。

dns:显示包括TCP区域传输以及基于标准UDP的DNS请求和回复在内的全部DNS数据流。

tftp:显示全部TFTP(Trivial File Transfer Protocol)数据流。

http:显示全部HTTP命令,回复以及数据传输报文,但不显示TCP握手报文,TCP ACK报文以及TCP结束报文。

icmp:显示全部ICMP报文。

域过滤器:

boot.option.hostname:显示全部包含主机名的DHCP数据流(DHCP基于BOOTP)。

http:host:显示全部包含HTTP主机名字段的全部HTTP报文。此报文是客户端向网络服务器发送请求时发出的。

ftp.request.command:显示全部包含命令的FTP数据流,好比USER,PASS,或RETR命令。

字符过滤器:

tcp.analysis.flags:显示全部包含TCP分析标识的全部报文,包括报文丢失,重传,或零窗口标识。

tcp.analysis,zero_window:显示含有代表发送方的接收缓存用完标识的报文。

显示过滤器比较运算符:

经过扩展过滤条件可查找某一域值,Wireshark针对此功能支持数字比较运算符。

1. ==或eq

例如:ip.src == 10.2.2.2

显示全部源地址为10.2.2.2的IPv4数据流

2. !=或ne

例如:tcp.srcport != 80

显示源端口除了80之外的全部TCP数据流

3. >或gt

例如:frame.time_relative > 1

显示距前一个报文到达时间相差1秒的报文

4. <或lt

例如:tcp.window_size < 1460

显示当TCP接收窗口小于1460字节时的报文

5. >=或ge

例如:dns.count.answers >= 10

显示包含10个以上answer的DNS响应报文

6. <=或le

例如:ip.ttl <= 10

显示IP报文中Time to Live字段小于等于10的报文

7. contains

例如:http contains “GET”

显示全部HTTP客户端发送给HTTP服务器的GET请求

对于基于TCP应用的过滤条件采用比较运算符。例如,若是想看端口80上面的HTTP数据流,使用HTTP.port==80。

小贴士:

运算符两边不用留空格。ip.src == 10.2.2.2与ip.src==10.2.2.2的效果是相同的。

过滤HTTP数据流:

在排查网页浏览器会话或检查网速过慢问题时,对浏览器会话进行过滤就显得尤其重要。过滤HTTP数据流有两种方式:

http

tcp.port==xx(xx表示所使用的HTTP端口)

第二种过滤方法更加有效