Wireshark简单使用介绍

发布时间 2023-03-23 16:13:02作者: 少年阿丁

Wireshark简单使用介绍

(1)Frame:   物理层的数据帧概况

(2)Ethernet II: 数据链路层以太网帧头部信息

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

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

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

 

【】Wireshark过滤器
抓取特定流量过滤器是在抓包的时候只抓取过滤条件的包,显示过滤器是在有多种流量的情况下,显示具备过滤条件的包

【】抓取特定数据流
首先在这里建议大家尽量避免使用抓取特定流量过滤。即便多看几个报文,也比漏看一个报文要好。当你抓取了大量报文的时候,用显示过滤(过滤选项也更多)来重点查看某一数据流。

应用抓取特定流量过滤,在 Capture下打开Capture Options设置窗口

1、抓取基于MAC的数据流

当你需要抓取发到/来自某一主机的IPv4或IPv6数据流,可创建基于主机MAC地址的抓包过滤条件。应用MAC地址时,需确保与目标主机处于同一网段。

ether host 6C-C6-7C-B8-68-01:抓取发送到/来自6C-C6-7C-B8-68-01的数据流

ether src 6C-C6-7C-B8-68-01:抓取来自6C-C6-7C-B8-68-01的数据流

ether dst 6C-C6-7C-B8-68-01:抓取发到6C-C6-7C-B8-68-01的数据流

not ether host 6C-C6-7C-B8-68-01:抓取除了发到/来自6C-C6-7C-B8-68-01以外的所有数据流

ether broadcast或ether dst ff:ff:ff:ff:ff:ff:抓取广播报文

ether multicast:抓取多播报文

抓取指定以太网类型的报文:ether proto 0800

抓取指定VLAN:vlan (vlan number)

抓取指定几个VLAN:vlan (vlan number)and vlan (vlan number)

例:ether host 6C-C6-7C-B8-68-01


2、抓取基于IP的数据流

如果你的抓包环境下有很多主机正在通讯,可以考虑使用所观察主机的IP地址来进行过滤。以下为IP地址抓包过滤示例:

host 172.16.1.69:抓取发到/来自172.16.1.69的数据流

host 2406:da00:ff00::6b16:f02d:抓取发到/来自IPv6地址2406:da00:ff00::6b16:f02d的数据流

not host 172.16.1.69:抓取除了发到/来自172.16.1.69以外的所有数据流

src host 172.16.1.69:抓取来自172.16.1.69的数据流

dst host 172.16.1.69:抓取发到172.16.1.69的数据流

host 172.16.1.69 or 172.16.1.70:抓取发到/来自172.16.1.69以及与通讯的数据流,抓取发到/来自192.168.11.254以及与通讯的所有数据流

例: src host 172.16.1.69


3、抓取基于端口的数据流

你可能需要查看基于一个或几个应用的数据流。抓包过滤器语法无法识别应用名,因此需要根据端口号来定义应用。通过目标应用的TCP或UDP端口号,将不相关的报文过滤掉。

port 53:抓取发到/来自端口53的UDP/TCP数据流(典型是DNS数据流)

not port 53:抓取除了发到/来自端口53以外的UDP/TCP数据流

port 80:抓取发到/来自端口80的UDP/TCP数据流(典型是HTTP数据流)

udp port 67:抓取发到/来自端口67的UDP数据流(典型是DHCP据流)

tcp port 21:抓取发到/来自端口21的TCP数据流(典型是FTP命令通道)

portrange 1-80:抓取发到/来自端口1-80的所有UDP/TCP数据流

tcp portrange 1-80:抓取发到/来自端口1-80的所有TCP数据流

(可自行尝试)

当你需要抓取多个不连续端口号的数据流,将它们通过逻辑符号连接起来。

port 20 or port 21:抓取发到/来自端口20或21的UDP/TCP数据流(典型是FTP数据和命令端口)

host 10.3.1.1 and port 80:抓取发到/来自10.3.1.1端口80的数据流

host 10.3.1.1 and not port 80:抓取发到/来自10.3.1.1除了端口80以外的数据流

udp src port 68 and udp dst port 67:抓取从端口68到端口67的所有UDP数据流(典型是从DHCP客户端到DHCP服务器)

udp src port 67 and udp dst port 68:抓取从端口67到端口68的所有UDP数据流(典型是从DHCP服务器到DHCP客户端)

抓取TCP连接的开始(SYN)和结束(FIN)报文,配置tcp[tcpflags] & (tcp-syn|tcp-fin)!=0

抓取所有RST(Reset)标志位为1的TCP报文,配置tcp[tcpflags] & (tcp-rst)!=0

less (length):抓取小于等于某一长度的报文,等同于len <=(length)

greater (length):抓取大于等于某一长度的报文,等同于len >=(length)


4、抓取基于指定协议的数据流

你可能需要查看基于一个或几个协议的数据流。通过目标应用的TCP、UDP或在TCP、UDP后加上端口号,将不相关的报文过滤掉。

icmp:抓取发到/来自icmp的数据流

port 53:抓取发到/来自端口53的UDP/TCP数据流(典型是DNS数据流)

not port 53:抓取除了发到/来自端口53以外的UDP/TCP数据流

port 80:抓取发到/来自端口80的UDP/TCP数据流(典型是HTTP数据流)

udp port 67:抓取发到/来自端口67的UDP数据流(典型是DHCP据流)

tcp port 21:抓取发到/来自端口21的TCP数据流(典型是FTP命令通道)

portrange 1-80:抓取发到/来自端口1-80的所有UDP/TCP数据流

tcp portrange 1-80:抓取发到/来自端口1-80的所有TCP数据流


【】显示特定数据流
显示过滤器可基于协议,应用,域名,或字符,对大小写敏感。绝大多数简单的显示过滤器由小写字母组成。
与捕捉过滤器使用的BPF语法不同,显示过滤器使用的是Wireshark特定的格式。除了某些特例之外,Wireshark显示过滤器和捕捉过滤器有很大的区别。


5、基于IP地址或主机报文过滤

对于IPv4数据流,我们使用字段名ip.src,ip.dst,ip.addr;对于IPv6数据流,使用ipv6.src,ipv6.dst,ipv6.host以及ipv6.addr。

ip.addr==172.16.1.69显示在IP源地址字段或IP目的地址字段包含172.16.1.69的帧。

ip.src==172.16.1.69显示所有来自172.16.1.69的数据流。

ip.dst==172.16.1.69显示所有发往172.16.1.69的数据流

!ip.addr==172.16.1.69显示除了在IP源地址字段或IP目的地址字段包含172.16.1.69以外的帧

例如在filter栏输入ip.dst ==172.16.1.79
显示信息,所有发往172.16.1.79的数据流

ip.src == 172.16.1.79 and ip.dst ==172.16.1.79 过滤源IP为172.16.1.79,目的IP为172.16.1.255的通信数据包
显示信息,源IP172.16.1.79,目的IP172.16.1.255的数据包


6、基于端口号的过滤

tcp.port == 80过滤tcp的80端口

协议过滤器

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

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

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

tcp:显示所有基于TCP的数据流。

 

7、字符过滤器:

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

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

例tcp.flags.syn == 1:过滤三次握手fsyn=1的数据包

 

8、显示运算符

通过扩展过滤条件可查找某一域值,Wireshark针对此功能支持数字比较运算符。我整理出来几种类型,这里就不一一给大家查看结果了,

==或eq

例如:ip.src == 10.2.2.2显示所有源地址为10.2.2.2的IPv4数据流

!=或ne

例如:tcp.srcport != 80显示源端口除了80以外的所有TCP数据流

或gt

例如:frame.time_relative > 1 显示距前一个报文到达时间相差1秒的报文

<或lt

例如:tcp.window_size < 1460 显示当TCP接收窗口小于1460字节时的报文

=或ge

例如:dns.count.answers >= 10 显示包含10个以上answer的DNS响应报文

<=或le

例如:ip.ttl <= 10 显示IP报文中Time to Live字段小于等于10的报文

contains

例如:http contains “GET” 显示所有HTTP客户端发送给HTTP服务器的GET请求

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

 

 

 

 

 

Wireshark抓包分析TCP三次握手
(1)TCP三次握手连接建立过程

    Step1:客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;

    Step2:服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;

   Step3:服务端发送一个SYN=0,ACK=1的数据包给客户端端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯。

 

(2)wireshark抓包获取访问指定服务端数据包

    Step1:启动wireshark抓包,打开浏览器输入www.huawei.com。

    Step2:使用ping www.huawei.com获取IP。

    Step3:输入过滤条件获取待分析数据包列表 ip.addr == 211.162.2.183

可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。


第一次握手数据包
客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图。
数据包的关键属性如下:
  SYN :标志位,表示请求建立连接
  Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据
  Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据

第二次握手的数据包
服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图
 数据包的关键属性如下:
  [SYN + ACK]: 标志位,同意建立连接,并回送SYN+ACK
  Seq = 0 :初始建立值为0,表示当前还没有发送数据
  Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)

第三次握手的数据包
  客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:
数据包的关键属性如下:
  ACK :标志位,表示已经收到记录
  Seq = 1 :表示当前已经发送1个数据
  Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

  就这样通过了TCP三次握手,建立了连接。开始进行数据交互

下面针对数据交互过程的数据包进行一些说明:

数据包的关键属性说明
  Seq: 1
  Ack: 1: 说明现在共收到1字节数据
  Seq: 1
  Ack: 951: 说明现在服务端共收到951字节数据

  在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG。如下
    其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有DATA数据传输,RST表示连接重置。