介绍

Wireshark(早前为Ethereal)是一个网络数据包分析软件。主要功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据,相对于命令行的tcpdump而言,wireshark软件人机界面交互更友好,功能更强大。。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

网络管理员使用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查资讯安全相关问题,开发者使用Wireshark来为新的通讯协定除错,普通使用者使用Wireshark来学习网络协定的相关知识。当然黑客也可使用来达到危险目的,注意职业操守,安全守法!!!

官网地址:https://www.wireshark.org/

官网下载地址:https://www.wireshark.org/#download

软件基础

1)软件界面功能初识:
首次启动界面如下:
wireshark操作手册
在上图下拉栏中选中,你要监控流量的网卡,选中0网卡后,开始在此接口上抓包:
wireshark操作手册
界面功能介绍:
wireshark操作手册
wireshark操作手册
上面中,1面板中(抓包数据面板),其中每一行对应一个网络报文,默认显示报文接收时间(相对开始抓取的时间点),源和目标IP地址,使用协议和报文相关信息。其中不通的报文以不通的颜色显示,默认绿色是TCP报文,深蓝色是DNS,浅蓝是UDP,黑色标识出有问题的TCP报文——比如乱序报文。

在窗口2中的某条记录上右键,会弹出窗口,单机追踪流(Follow TCP Stream):
wireshark操作手册
可看到在服务器和目标端之间的全部会话:

wireshark操作手册

过滤器表达式

捕获过滤器表达式

作用:通过过滤器表达式可在茫茫的万千数据中,找到对你真正有用的信息,表达式在wireshark开始捕获数据包之前进行比对(相当于数据进来前设置了一层过滤网),只捕获符合条件的数据包,不记录不符合条件的数据包。

捕获过滤器表达式不像显示过滤器表达式那样有明显的规律,但写法不多所以也不难;而且除非全部捕获要占用的磁盘空间实现太大,且非常明确过滤掉的数据包是不需要的,不然一般都不用捕获过滤器表达式而用显示过滤器表达式。

捕获过滤器出现在程序的欢迎界面:
wireshark操作手册
过滤器设置:
wireshark操作手册

显示过滤器表达式

显示过滤器出现在程序开始抓包后界面:
wireshark操作手册
显示过滤表达示在上图中工具栏下方的“显示过滤器”输入框输入即可生效。

注意:wireshark在应用规则的时候,是按自上而下的顺序去应用规则。因此刚添加的规则会优先应用。如果你想调整顺序,可以选中要调整顺序的规则,然后点击右边的“UP” 或则 “Down” 按钮。

1)基本过滤表达式

一条基本的表达式由过滤项、过滤关系、过滤值三项组成。

比如ip.addr == 192.168.1.1,这条表达式中ip.addr是过滤项,**双等号==**是过滤关系,192.168.1.1是过滤值(整条表达示的意思是找出所有ip协议中源或目标ip、等于、192.168.1.1的数据包)

2)过滤项
初学者感觉的“过滤表达式复杂”,最主要就是在这个过滤项上:一是不知道有哪些过滤项,二是不知道过滤项该怎么写。

这两个问题有一个共同的答案-----wireshark的过滤项是: “协议“+”.“+”协议字段” 的模式。以端口为例,端口出现于tcp协议中所以有端口这个过滤项且其写法就是tcp.port,而udp的为udp.port。

推广到其他协议,如eth、ip、udp、http、telnet、ftp、icmp、snmp等等其他协议都是这么个书写思路。当然wireshark出于缩减长度的原因有些字段没有使用协议规定的名称而是使用简写(比如Destination Port在wireshark中写为dstport),又出于简使用增加了一些协议中没有的字段(比如tcp协议只有源端口和目标端口字段,为了简便使用wireshark增加了tcp.port字段来同时代表这两个),但思路总的算是不变的。而且在实际使用时我们输入“协议”+“.”wireshark就会有支持的字段提示(特别是过滤表达式字段的首字母和wireshark在上边2窗口(协议窗口)显示的字段名称首字母通常是一样的),看下名称就大概知道要用哪个字段了。wireshark支持的全部协议及协议字段可查看官方说明。
wireshark操作手册

3)过滤关系
过滤关系就是大于、小于、等于等几种等式关系,我们可以直接看官方给出的表。注意其中有“English”和“C-like”两个字段,这个意思是说“English”和“C-like”这两种写法在wireshark中是等价的、都是可用的。
wireshark操作手册
4)过滤值
过滤值就是设定的过滤项应该满足过滤关系的标准,比如8080、6639、3389等等。过滤值的写法一般已经被过滤项和过滤关系设定好了,只是填下自己的期望值就可以了。

5)复合过滤表达示
所谓复合过滤表达示,就是指由多条基本过滤表达式组合而成的表达示。基本过滤表达式的写法还是不变的,复合过滤表达示多出来的东西就只是基本过滤表达示的“连接词”
wireshark操作手册
6)常见显示过滤表达式

OSI层 表达式
数据链路层 筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26
筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26
网络层 筛选ip地址为192.168.1.1的数据包----ip.addr == 192.168.1.1
筛选192.168.1.0网段的数据---- ip contains "192.168.1"
筛选192.168.1.1和192.168.1.2之间的数据包----ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
筛选从192.168.1.1到192.168.1.2的数据包----ip.src == 192.168.1.1 && ip.dst == 192.168.1.2
传输层 筛选tcp协议的数据包----tcp
筛选除tcp协议以外的数据包----!tcp
筛选端口为80的数据包----tcp.port == 80
筛选12345端口和80端口之间的数据包----tcp.port == 12345 && tcp.port == 80
筛选从12345端口到80端口的数据包----tcp.srcport == 12345 && tcp.dstport == 80
应用层 http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1),http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。
筛选url中包含.php的http数据包----http.request.uri contains ".php"
筛选内容包含username的http数据包----http contains “username”

7)常用排错过滤条件:
对于排查网络延时/应用问题有一些过滤条件:

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。如果这一时间间隔比较长那可能表示某种类型的网络延时(报文丢失,拥塞,等等)。

软件应用

Wireshark观察基本网络协议

TCP网络连接是否成功:

TCP/IP通过三次握手建立一个连接。这一过程中的三种报文是:SYN,SYN/ACK,ACK。
  在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
wireshark操作手册

第一步是找到PC发送到网络服务器的第一个SYN报文,这标识了TCP三次握手的开始。如果你找不到第一个SYN报文,选择Edit -> Find Packet菜单选项。选择Display Filter,输入过滤条件:tcp.flags,这时会看到一个flag列表用于选择。选择合适的flag,tcp.flags.syn并且加上==1。点击Find,之后trace中的第一个SYN报文就会高亮出来了。
 wireshark操作手册
wireshark操作手册
对于Http、SMTP,FTP数据包,在报文右键菜单中国,选追踪流(Follow TCP Stream),单击TCP流,就创建了一个只显示TCP会话报文的自动过滤条件,然后会弹出一个会话显示窗口,默认情况下包含TCP会话的ASCII代码,客户端报文用红色表示服务器报文则为蓝色。
wireshark操作手册
关闭弹出窗口,Wireshark就只显示所选TCP报文流。协议窗口就可清晰分辨出3次握手的情况了,实际这里Wireshark自动为此TCP会话创建了一个显示过滤。

SYN/ACK报文:

一旦服务器接收到客户端的SYN报文,就读取报文的***并且使用此编号作为响应,也就是说它告知客户机,服务器接收到了SYN报文,通过对原SYN报文***加一并且作为响应编号来实现,之后客户端就知道服务器能够接收通信。

ACK报文:

客户端对服务器发送的确认报文,告诉服务器客户端接收到了SYN/ACK报文,并且与前一步一样客户端也将***加一,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

三次握手报文示例:
wireshark操作手册
wireshark操作手册

ARP & ICMP:

ARP报文:

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。其功能是:主机将ARP请求广播到网络上的所有主机,并接收返回消息,确定目标IP地址的物理地址,同时将IP地址和硬件地址存入本机ARP缓存中,下次请求时直接查询ARP缓存。

最初从PC发出的ARP请求确定IP地址192.168.1.1的MAC地址,并从相邻系统收到ARP回复。ARP请求之后,会看到ICMP报文。

ICMP报文:

网络控制消息协定(Internet Control Message Protocol,ICMP)用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,令管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。

PC发送echo请求,收到echo回复。ping报文被mark成Type 8,回复报文mark成Type 0。

如果多次ping同一系统,在PC上删除ARP cache,使用如下ARP命令之后,会产生一个新的ARP请求。

HTTP:

报文中包括一个GET命令,当HTTP发送初始GET命令之后,TCP继续数据传输过程,接下来的链接过程中HTTP会从服务器请求数据并使用TCP将数据传回客户端。传送数据之前,服务器通过发送HTTP OK消息告知客户端请求有效。如果服务器没有将目标发送给客户端的许可,将会返回403 Forbidden。如果服务器找不到客户端所请求的目标,会返回404。

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

对Http协议包进行分析

  • HTTP请求消息头
    1〉Accept:call服务器,可以接收文件、网页和图片。
    2〉Accept-Charset:所接收的字符编码。
    3〉Accept-Encoding:可接收()压缩后的数据。
    4〉Accept-Language:Browser支持中、英文。
    5〉Host:要找的主机是。
    6〉If-Modified-Since:告诉服务器我们的缓冲中有这个资源文件,该文件的时间
    7〉Referer:告诉服务器,我来自哪里。
    8〉User-Agent:告诉服务器,Browser内核。
    9〉Cookie:
    10〉Connection:保持连续发完信息后,我不关闭连接。
    11〉Date:Browser发送时间。
    wireshark操作手册
    查看各协议的数据包个数以及查看每条流的包个数:
    wireshark操作手册

工具

1)IO图形工具分析数据流:IO Graphs:
IO graphs是一个非常好用的工具。基本的Wireshark IO graph会显示抓包文件中的整体流量情况,通常是以每秒为单位(报文数或字节数)。默认X轴时间间隔是1秒,Y轴是每一时间间隔的报文数。如果想要查看每秒bit数或byte数,点击“Unit”,在“Y Axis”下拉列表中选择想要查看的内容。这是一种基本的应用,对于查看流量中的波峰/波谷很有帮助。要进一步查看,点击图形中的任意点就会看到报文的细节。
wireshark操作手册
将Y轴改为bits/tick这样就可以看到每秒的流量:
wireshark操作手册
待整理…………

参考地址:https://www.jianshu.com/p/55ec409c739e

相关文章: