使用wireshark抓包理解tcp协议和tls

首先下载安装wireshark
打开软件

1.选则自己连结的网络;
在这里插入图片描述
在这里插入图片描述
此时就会捕获的数据

2.加上端口过滤。
在这里插入图片描述

3.启动一个本地的http服务(这里采用的nodejs);

// server.js
import koa from 'koa';
const app = new koa();
app.use(ctx => {
    ctx.body = "hello"
})
app.listen(3000)

node server.js

4.curl http://localhost:3000
在这里插入图片描述

在这里插入图片描述

一个TCP报文段的最大长度为65495字节.
TCP封装在IP内,IP数据报最大长度2^16-1 ,头部最小20TCP头部长度最小20,所以最大封装数据长度为65535-20-20=65495
TCP固定首部20个字节,即除去选项及填充

Syn (Synchronize Sequence Numbers) 同步序列编码;
Seq (Sequence Number) 当前包序列号;
Sequence Number (raw)== Syn +Seq;
Next Sequence Number 下一个包的的序列号 ==Seq + Len
Acknowledgment Number 确认序号
Acknowledgment number (raw) ==确认序号 + (对方)Sequence Number (raw)
Len 数据包长度
点击SEQ=0的行,可以看到如下数据:

1. tcp第一次握手:客户端===>服务端 发起连接请求。
Sequence Number: 0    (relative sequence number) 
Sequence Number (raw): X
[Next Sequence Number: 1    (relative sequence number)]
Acknowledgment Number: 0
Acknowledgment number (raw): 0
...
.... .... ..1. = Syn: Set  #(不重复随机数X)
2. tcp第二次握手:服务端===>客户端 回应请求。
Sequence Number: 0    (relative sequence number)
Sequence Number (raw): Y 
[Next Sequence Number: 1    (relative sequence number)]
Acknowledgment Number: 1
Acknowledgment number (raw): X+1
...
.... .... ..1. = Syn: Set # (不重复随机数Y)
3.tcp第三次握手:客户端===>服务端 回应。
Sequence Number: 1    (relative sequence number)
Sequence Number (raw): X+1 #4257407297
Acknowledgment Number: 1
Acknowledgment number (raw): Y+1 #3318791688
...
.... .... ..1. = Syn: Set

三次握手

在这里插入图片描述

第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;
第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;
第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。

其中:FIN标志位数置1,表示断开TCP连接。

四次挥手

在这里插入图片描述

在这里插入图片描述

  1-3行:建立连接;
   6 行:服务端==>客户端:回答79号的内容:第1包 ,长度65495,下一个包编号65496;
   7 行:服务端==>客户端:回答79号的内容:第65496包 ,长度65495,下一个包编号130991;
   8 行:服务端==>客户端:回答79号的内容:第130991包 ,长度65495,下一个包编号196486;
   9 行:服务端==>客户端:回答79号的内容:第196486包 ,长度65495,下一个包编号261981;
  10 行:服务端==>客户端:回答79号的内容:第261981包 ,长度65495,下一个包编号327476;
  11 行:服务端==>客户端:回答79号的内容:第327476包 ,长度56384,下一个包编号383860;(完)
  12 行:客户端==>服务端:回答383860号内容:确认79号包
15-18行:断开连接;(同理)

http与https

从图中可以看出http是明文传输的:

在这里插入图片描述

https网络协议模型:

在这里插入图片描述

SSL/TLS握手过程

在这里插入图片描述
然后我们尝试抓取一下https
在这里插入图片描述

第一步,浏览器给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
在这里插入图片描述

第二步,服务器确认双方使用的加密方法,使用的tls版本号和一个随机数。
在这里插入图片描述

第三步,并给出数字证书、以及一个服务器运行Diffie-Hellman算法生成的参数,比如pubkey。
在这里插入图片描述

第四步,浏览器获取服务器发来的pubkey,计算出另一个pubkey,发给服务器。
在这里插入图片描述

第五步,服务器发给浏览器一个session ticket。
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTPS (Hypertext Transfer Protocol Secure) 是HTTP协议的一个安全版本,通过SSL/TLS协议加密数据,提供数据传输的安全性和隐私保护。当你使用Wireshark抓包分析HTTPS流量时,你会看到实际的网络通信被包装在一个加密套接字中,这使得直接查看数据内容变得困难。 抓包分析HTTPS的主要步骤如下: 1. **启动Wireshark**:首先,打开Wireshark,并确保已经安装了SSL/TLS解密插件(如SSL dissector),以便正确解析加密流量。 2. **选择接口和过滤器**:选择你的网络接口,通常选择“Any”来捕获所有流量,然后添加过滤器`tcp.port == 443`,这样只会显示HTTPS流量。 3. **截取流量**:开始抓包,等待一段连接时间,确保捕获到完整的HTTPS会话,包括三次握手(TCP连接建立)和后续的数据交换。 4. **解密流量**:Wireshark会自动对SSL/TLS包进行解密,但解密过程可能会因为证书问题、私钥缺失等原因失败,这时可能需要手动导入相应的证书或信任链。 5. **查看会话信息**:在捕获的包中,你可以看到TLS/SSL连接的详细信息,如版本、加密算法、认证方法等。HTTP请求和响应会被转换为明文显示。 6. **分析数据**:通过查看HTTP请求头和响应头,可以了解请求的URL、方法、HTTP状态码以及任何附加的身份验证信息。 相关问题: 1. 如何在Wireshark中导入自定义的SSL证书来解密HTTPS会话? 2. HTTPS握手过程中,三次握手具体指什么? 3. Wireshark如何处理SSL/TLS连接失败的情况?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值