Wireshark 抓包过滤器使用及TCP三次握手深层分析

  • Post author:
  • Post category:其他




前言

笔者上一篇写过 Docker 的博客 logo 就是一条小鲨鱼,没想到这次想要更的内容,碰巧也是和鲨鱼有关,当然只有 logo 有关了,哈,看来和 shark 有不解之缘。



一、Wireshark介绍与安装

  • Wireshark 是非常流行、功能强大的网络数据包分析软件,并且开源免费。可在

    Wireshark官网

    下载对应系统版本的软件,笔者本文使用 V3.2.5 Windows 64-bit。它用于

    软件开发、软件测试

    等工作中debug十分方便;它也不会修改网络数据包的内容,而是只反映出传输的数据包信息。

  • 由于 Wireshark 能获取但不能解密HTTPS,所以处理 HTTP,HTTPS 宜用


    Fiddler


    , 而像TCP,UDP的协议宜用

    Wireshark

  • 安装按默认选项Next或根据需求选择,这里仅列出需要注意选择的过程图。

    【选择组件】

    在这里插入图片描述

    【快捷方式和关联扩展名】

    在这里插入图片描述

    【Npcap 捕获在线网络包】

    在这里插入图片描述

    【勾选 wireless adapters】

    在这里插入图片描述



二、Wireshark 抓包(捕获数据包)

  1. 启动 Wireshark v3.2.5

    在这里插入图片描述

  2. 进入【Capture】—【Options】或快捷键

    CTRL+K

    ,取消勾选所有接口使用混杂模式,然后勾选【WLAN】网卡,【OK】开始抓包。

    在这里插入图片描述

  3. 如图,Wireshark 正在抓包状态中。

  4. 要抓取某个网站数据包,

    ping 网址即可,执行完命令后相应数据包就已被 Wireshark 捕获(ICMP报文);

    或者 Chrome 浏览器访问网址,也可以被捕获(TCP报文),但还是要获取该网址服务器ip。

    ping www.baidu.com #执行想抓包的操作,并得到该网址对应的服务器ip
    

在这里插入图片描述

  1. 设置过滤条件(display filter),对抓到的包进行过滤,得到想要分析的那部分数据包。例如:

    tcp and ip.addr == 180.101.49.12
    

    ip.src==180.101.49.12 or ip.dst==180.101.49.12 and tcp
    


过滤条件含义

:只显示 Source 或 Destination 为此ip的数据包,并只保留显示TCP协议

在这里插入图片描述

  1. Wireshark 完成对该网址的抓包,进行下一步分析。



三、Wireshark 抓包界面介绍

在这里插入图片描述

重点介绍


  • 显示过滤器(Display Filter)

    用于在抓取数据包后设置条件过滤数据包,通常是在抓取的数据包内容较多时使用。


  • 数据包列表面板(Packet List Pane)

    抓到的每个数据包都有编号,时间戳,源地址,目标地址,协议,长度,信息。 不同的颜色代表不同的协议。


  • 数据包详情区(Packet Details Pane)

    包括 TCP/IP 参考模型的物理层、数据链路层、互联网层、传输层、应用层的详尽信息,例如分别对应:Frame、Ethernet、IPV4、TCP、HTTP。



四、Wireshark 过滤器引擎及过滤条件表达式

wireshark 过滤器引擎能帮助筛选出有用的数据包,屏蔽显示大量不相关的包以免扰乱分析。



1、抓包过滤器(capture filter 抓到包前设置)
  • 进入抓包过滤器:【Capture】—【Capture Filters】

    在这里插入图片描述

  • 抓包之前

    设置过滤条件表达式

    ,如 host 180.101.49.12 && tcp

    在这里插入图片描述

  • 【Start】开始捕获,窗口标题会提示我们抓包前设置的内容

    在这里插入图片描述


  • 抓包过滤条件表达式规则

    类型 Type:host、port、net

    方向 Dir:src、dst

    协议 Proto:ether、ip、tcp、udp、http、icmp、ftp

    运算符:&& 、|| 、!

(1)按协议过滤:直接输入协议名,只显示某协议的数据包列表,如TCP、ICMP

(2)按IP过滤:

 host 192.168.0.124
 src host 192.168.0.124
 dst host 192.168.0.124

(3)按端口过滤

 port 80
 src port 80
 dst port 80

(4)逻辑运算符&&、|| 、!

 host 192.168.0.124 || host 192.168.0.164 #抓取两个主机地址数据包
 src host 192.168.0.124 && dst port 80    #抓取符合源主机地址和目的端口的数据包


2、显示过滤器(display filter 抓到包后设置)

在这里插入图片描述

  • 点击【Stop】停止上面刚才的抓取,再进入【Options】进入新的抓取

  • 清除之前设置的“抓取过滤器”,再【Start】抓取该 WLAN 网卡

    所有数据包


    在这里插入图片描述

    所有数据包如下

    在这里插入图片描述

  • ping 某网址或ip,然后在

    显示过滤栏输入过滤条件

    ,例如 ip.addr == 180.101.49.12 and icmp

    在这里插入图片描述


  • 显示过滤器规则


(1)按协议过滤

Filter 框中直接输入对应协议名,如 tcp、icmp。

注:协议名称小写。


(2) 按IP过滤

ip.src == 192.168.0.124  #显示源地址数据包列表
ip.dst == 192.168.0.124  #显示目标地址数据包列表
ip.addr == 192.168.0.124 #显示源IP地址或目标IP地址的数据包列表


(3)按端口过滤

tcp.port == 80     #TCP协议源主机或目的主机端口
tcp.srcport == 80  #TCP协议的源主机端口
tcp.dstport == 80  #TCP协议的目的主机端口


(4)按http请求方法过滤

http.request.method=="GET" #只显示HTTP GET方法的数据包列表


(5)比较操作符

: == 、!= 、> 、< 、>= 、<=


(6)逻辑运算符

: and,or,not



五、Wireshark 数据包分析

熟悉界面和过滤表达式后,就能分析过滤到的数据包了。



1.分析数据包——对照TCP/IP参考模型

​ 在 Wireshark 数据包详情区中有:



Frame:

物理层数据帧概况



Ethernet II:

数据链路层以太网帧头部



Internet Protocol Version 4:

互联网层IP包头部



Transmission Control Protocol:

传输层的数据段头部



Hypertext Transfer Protocol:

应用层的信息



2.分析数据包——此处我对照TCP报文格式为例

在这里插入图片描述

​ 在数据包详情区中,需点【+】号展开”transmission control protocol”。

​ 对应TCP报文格式如下所示:

在这里插入图片描述



3.六个标志位 Flags 的功能



URG:urgent

紧急标志,1–优先级高



ACK:acknowledgement

确认标志,代表响应,1–确认有效



PSH:push

推标志,代表有数据传输,1–尽快推给应用层



RST:reset

复位标志,代表连接重置,1–出现严重差错要重置



SYN:synchronized

同步标志,代表建立连接,1–连接请求或连接接受请求



FIN:finish

结束标志,代表关闭连接,1–没数据传了,要求释放连接

在这里插入图片描述



六、Wireshark详细分析TCP三次握手

​ 对比UDP这种不可靠但效率高的协议来讲,TCP协议是传输层中可靠的协议,适用于【准确性高,时效性较低】的【用户登录】等场景。所以,为了保证“可靠”这一需求,建立连接的时候,就要用“三次握手”保证。这体现在:只要收到对方数据,就要发送 ACK 进行确认。

​ 四次挥手由于这次我写的篇幅太长了,在另一篇里有空再做详解。



1.我对TCP三次握手的理解

发送方(client)好比男生,譬如笔者我哈哈;接收方(server)好比女孩子,下图是我画的示意图。

在这里插入图片描述

在一个华灯初上,天朗气清的城市深夜,我(client)遇到了一个女孩子(server),人群熙攘相距较远不能确定对方是否认识自己;首先要通过打招呼即招手(syn)的方式,确认她是否认识我,从而进行交流(data):

  1. 我(client)首先向女孩子(server)用力地招手(syn)

  2. 妹子(server)看到招手后,向我微笑点头(ack)表示确认看到了我,同时她不确定我是否也注意到了她,所以也向我(client)招了招手(syn)

  3. 我(client)看到妹子也向这边招手后,赶忙也微笑点头(ack)表示确认我也看到了她,妹子看到我也微笑点头后,便确信找对了人(established)

    于是我们两个人就走到了一起,communication or date (ha ha)。



2.追踪一条http记录的TCP stream

如图,【Analyze】-【Follow】-【TCP stream】或 “tcp.stream eq 46”

在这里插入图片描述

然后,得到该HTTP记录(如腾讯网)的相关TCP流:抓到的前3个都是TCP包,第4个包是HTTP的,说明该HTTP使用的是TCP来建立连接。

在这里插入图片描述



3.三次握手的实例分析
  • 第一次握手:标志位SYN,设序列号seq=0(3507523343)

    在这里插入图片描述

  • 第二次握手:标志位SYN,ACK,把收到的序列号seq+1,得确认序列号ack为1(3507523344),即ack=seq+1;并设新序列号new seq=0(3907585407)

    在这里插入图片描述

  • 第三次握手:标志位ACK,把收到的新序列号 new seq+1,得确认序列号ack为1(3907585408),即ack=new seq+1。

    在这里插入图片描述

    注:这里我讨论的 seq/ack 为0或1,使用的是 relative sequence/ack number,相对序列号/确认号



七、原创手冻码字不易,谢绝转载,喜欢请收藏点赞哦。

本博文首次且唯一发表在CSDN,手动原创码字,喜欢请收藏点赞,共同进步。

pps:又是研究的一天呢╮(╯▽╰)╭晚安。T20200721 01:46



版权声明:本文为complected原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。