wireshark抓包使用教程与通过抓包对TCP三次握手进行分析

世事千帆过,前方终会是温柔和阳光。。。。
在这里插入图片描述

wireshark使用教程与TCP三次握手分析

在这里插入图片描述

一、wireshark安装教程

wireshark安装包下载地址
下载地址:链接:https://pan.baidu.com/s/17wff8ecKF2xGzEIA75Tmgg
提取码:qxxl

安装教程
在这里插入图片描述

下载2.6.1版本对应安装。
在这里插入图片描述
直接next

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、简单抓包测试

由于我本次使用的是抓取本地电脑请求baidu.com的示例。所以 打开软件以后选择 捕获以太网。。然后双击两下

在这里插入图片描述
.进入以下界面
在这里插入图片描述
接下来执行需要抓包操作。使用CMD命令 :ping www.baidu.com .获取需要捕获的ip地址信息

在这里插入图片描述
然后在wireshark 软件过滤拦输入 过滤条件: ip.addr == 163.177.151.110
说明:ip.addr 表示过滤出目的主机ip地址为 163.177.151.110 或者源地址为163.177.151.110 的数据包。一次简单的抓包就是这样完成了.
在这里插入图片描述
但是你可能会很疑惑。。还是不太使用 。接下来为你介绍一下软件的使用教程。

三、软件页面介绍

主界面如图所示

在这里插入图片描述

  • 过滤栏:用于设置过滤条件进行数据包列表过滤。菜单路径:【分析】->【显示过滤器】
  • 数据列表区【数据包列表】:显示捕获到的数据包记录。每条记录包含编号、时间戳、源地址、目标地址、协议长度。以及数据包信息。
  • 数据包详细信息:点击数据包列表内任意一条记录会显示改数据包所以详细内容

选择主列表任意一行,点击可以展示如下页面。这里展示的就是一个请求数据包的详细信息
在这里插入图片描述
Frame对应了物理层
Ethernet II 对应了数据链路层
Internet protocol 对应网络层
Transmission control Protocol 对应传输层
Hypertext Transfer Protocol 对应应用层 【图片中未展示】

四、过滤器表达式语法

1.抓包过滤器语法和实例

抓包过滤器类型Type(host、net、port)、方向Dir(src、dst)、协议Proto(ether、ip、tcp、udp、http、icmp、ftp等)、逻辑运算符(&& 与、|| 或、!非)

(1) 协议过滤

比较简单,直接在抓包过滤框中直接输入协议名即可。

TCP
HTTP
ICMP
(2)IP过滤

源地址或目的主机 ip为192.168.1.104

 host 192.168.1.104      

源地址为192.168.1.104

src host 192.168.1.104

目标地址为192.168.1.104

dst host 192.168.1.104
(3)端口过滤
tcp.port == 80
或
tcp.port in {80}
(4)逻辑运算符过滤

抓取主机地址为192.168.1.104、目的端口为80、81的数据包

ip.addr == 192.168.1.104 && tcp.port in {80 81} 

抓取主机为192.168.1.104或者192.168.1.102的数据包

ip.addr == 192.168.1.104 || ip.addr == 192.168.1.102

2.显示过滤器语法和实例

(1)比较操作符

比较操作符有== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于。

(2)协议过滤

比较简单,直接在Filter框中直接输入协议名即可。注意:协议名称需要输入小写:udp、tcp、icmp

(3)ip过滤

ip.src ==192.168.1.104 显示源地址为192.168.1.104的数据包列表

ip.dst==192.168.1.104, 显示目标地址为192.168.1.104的数据包列表

ip.addr == 192.168.1.104 显示源IP地址或目标IP地址为192.168.1.104的数据包列表
#####(4)过滤端口

tcp.port ==80, 显示源主机或者目的主机端口为80的数据包列表。
tcp.srcport == 80, 只显示TCP协议的源主机端口为80的数据包列表。
tcp.dstport == 80,只显示TCP协议的目的主机端口为80的数据包列表

(5) http 模式过滤

http.request.method==“GET”, 只显示HTTP GET方法的

(6)逻辑运算符 为 and/or/not 或者【&& 、|| 、!】

过滤多个条件组合时,使用and/or。比如获取IP地址为192.168.1.104的ICMP数据包表达式为ip.addr == 192.168.1.104 and icmp

(7)按照内容格式过滤

如下我想过滤出data数据包中为abcd"内容的数据流。包含的关键词是contains 后面跟上内容。
data contains “abcd”
如果知道明确内容,和ip
ip.addr == 192.168.1.104 && data.text== ‘abcd’

更多过滤规则可参考:
wireshark过滤规则

五、TCP三次握手分析

TCP的头部格式示例图
在这里插入图片描述
序列号:在初次建立连接时,客户端和服务端为【本次连接】随机初始化一个序列号。【序列号用于解决网络包乱序的问题】
确认号:用于表示【接收端】告诉【发送端】对上一个数据包已经成功接收。【确认号,可以用来解决网络包丢失的问题】
标记位: SYN为1 表示希望创建连接。ACK为1,表示确认号字段有效。FIN为1表示,希望断开连接。RST为1,表示TCP连接出现异常,需要断开。SEQ请求序列号

序列号和确认号作用图例
在这里插入图片描述

1.tcp三次握手连接建立过程

  1. 服务端主动监听某个端口,处于LISTEN状态
  2. 第一次握手建立连接,客户端向服务端发送 SYN 报文 (SYN=1,SEQ=X,X为客户端序列号client_isn)
  3. 第二次握手,服务端接收到请求并允许连接,就会返回SYN+ACK报文(SEQ=Y,ACK_NUM=X+1,SYN=1,ACK=1)给客户端,告诉它确认允许连接。报文说明【SEQ为服务端序列号,即Sequence Num。ACK_NUM为确认号(Acknowledgement),ACK_NUM=X(客户端序列号)+1】
  4. 第三次握手,当客户端接收到服务端返回的【SYN+ACK报文】后,客户端需要再次发送确认包ACK(SEQ=X+1. ACK_NUM=Y+1)。
  5. 连接建立成功

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

Step1: 由于我这提前知道了需要过滤的ip,所以可以直接启动wireshark, 输入过滤条件 ip.addr== 192.168.140.82 开始抓取。你也可以自行去编写个接口测试

Step2:浏览器访问接口

192.168.140.82:10100/api/addressResolution?instId=XPOSDZ_01_INST&address=山东省济宁市任城区济宁市草桥口

Step3: 观察wireshark
在这里插入图片描述
观察前3行可以看到。主机192.168.73.52和192.168.140.82来回发了三次应答请求。

  1. 第一次由我本机73.52的49799端口请求到140.82主机的10100端口,发送syn报文
  2. 第二次由140.82主机的10100端口向73.52主机 发送了【SYN+ACL】报文。
  3. 第三次由73.52主机的49799端口向140.82主机的10100端口,发送【ACK】报文

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

详细说明

第一次握手数据包

点击第一条发送记录,可以看到如下界面。客户端73.52发送一个tcp到140.82服务端, 标志位SYN=1. 序列号为0,代表客户端建立链接。
在这里插入图片描述
在这里插入图片描述
数据包的关键属性如下:
SYN :标志位,表示请求建立连接
Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据
Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据

第二次握手的数据包

第二行记录可以看到。服务器140.82发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的ISN加1,即0+1=1, 如下图

在这里插入图片描述
在这里插入图片描述
数据包的关键属性如下:
Seq = 0 :初始建立值为0,表示当前还没有发送数据
Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)

第三次握手的数据包

第三行记录可以看到。客户端发送了ACK确认包。SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1

在这里插入图片描述
在这里插入图片描述
数据包的关键属性如下:
ACK=1 :标志位,表示已经收到记录
Seq = 1 :表示当前已经发送1个数据
Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。
就这样通过了TCP三次握手,建立了连接。开始进行数据交互。

一个完整的tcp三次握手就是这样完成的。

学习抓包过程还是挺有趣的,有兴趣的小伙伴去尝试玩耍一下tcp四次挥手的抓包过程。再来一起讨论哦。

详细教程

https://zhuanlan.zhihu.com/p/350195734

关注【一起收破烂】回复【006】获取最新大厂java面试资料以及简历模型120套哦~**
在这里插入图片描述

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

收破烂的小熊猫~

你的鼓励将是我创造最大的东西~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值