本博目录
前言
笔者上一篇写过 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 抓包(捕获数据包)
-
启动 Wireshark v3.2.5
-
进入【Capture】—【Options】或快捷键
CTRL+K
,取消勾选所有接口使用混杂模式,然后勾选【WLAN】网卡,【OK】开始抓包。
-
如图,Wireshark 正在抓包状态中。
-
要抓取某个网站数据包,
ping 网址即可,执行完命令后相应数据包就已被 Wireshark 捕获(ICMP报文);
或者 Chrome 浏览器访问网址,也可以被捕获(TCP报文),但还是要获取该网址服务器ip。
ping www.baidu.com #执行想抓包的操作,并得到该网址对应的服务器ip
-
设置过滤条件(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协议
- 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):
-
我(client)首先向女孩子(server)用力地招手(syn)
-
妹子(server)看到招手后,向我微笑点头(ack)表示确认看到了我,同时她不确定我是否也注意到了她,所以也向我(client)招了招手(syn)
-
我(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