查看原文
其他

抓了个包,发现日本也有···

轩辕之风 轩辕的编程宇宙 2024-03-09

大家好,我是轩辕。

前几天,有位国外的粉丝遇到了一个网络问题,发现访问不了国内的某个网站。这让我想起三年前的一个事情,跟他的情况类似。

当时这篇文章有点敏感,发了不到半个小时就删掉了,估计有很多人都没看到过。今天我做了修改,大家可以看下。


当时的情况是这样的:

总结:人在日本,开着WIFI访问不了极客时间,为啥?

随后她还给我转发了一张浏览器的截图:

我一下发现了不对劲,请注意这几个字:

如果是我们的请求到不了服务器造成的无法访问,一般是这样提示的:

或者请求能够到达服务器,但服务器拒绝访问,一般是这样提示的:

而连接被重置,事情就不简单了。

接下来,我让这位在日本的朋友装上了抓包神器wireshark,想抓一下网络通信,看看到底发生了什么。

先看一下这位朋友的机器上,ping一下极客时间官网的域名,得到的IP地址:

这是一个阿里云的服务器,在抓到的网络通信中,我看到了浏览器发起了多次的请求尝试连接,下面每一行都是一个会话:

点开一个来看看,TCP的三次握手是正常的,服务器能够正常返回握手包,说明服务器是能够访问的,443端口也是能触达的:

因为是443端口,HTTPS,按照协议规定,三次握手之后,接下来,客户端该发起SSL握手了,但诡异的事情就发生了,客户端刚刚发出了SSL的握手包,服务器就返回了一个RST报文:

好家伙,这下知道为什么显示连接被重置了吧。

什么是RST包?

RST,就是ReSet,重置的意思,在《TCP/IP详解·卷一》中有提到:

一般来说,当发现一个到达的报文段对于相关连接而言是不正确的时, TCP就会发送一个重置报文

并且列举了在这几种情况下,会发送RST包:

1.端口不存在

当向一台计算机未开放的端口发起连接请求,对方就会返回一个RST包。

很明显,这位朋友的电脑不属于这种情况,否则在第一次握手时,服务器也不会返回正常的握手包了。

2.终止一条连接

终止一条连接的方式,正常情况下,就是咱们熟知的四次挥手,通过发送FIN包关闭连接。

但有正常,就有不正常,RST同样可以用来终止一条连接。而与FIN不同的是,FIN是会等排队等待发送的数据全部发出去后,才会被发送,以保证数据不会丢失。而RST是不用等待排队数据发送,立即发给对方,等待发送的数据将被全部丢弃。

3.时间等待错误

TCP有一系列的计时器用来完成超时重传以及连接状态的维护等工作,但如果超过定时器的时间,服务器已经清除了一条连接的信息,在这之后,客户端新的数据才姗姗来迟,那这时候,也会收到一个RST报文。

很显然,这位朋友的电脑也不是这种情况,三次握手完成之后,便立即发起了SSL握手,没有理由超时。

那问题就来了,服务器为什么要返回一个RST包呢?

直到我看到了接下来的通信,我悟了:

发现了吗,就在返回了RST包之后,服务器后续竟然还在与客户端进行SSL握手(就是图中黄色的那根箭头,服务器返回的Hello证书)!!!

不仅如此,在客户端这边因为收到RST已经关闭连接没有反应之后,服务器还在一直尝试重传:Hello,证书来了,听到请回答,听到请回答!

顺便可以注意下TCP重传时间的变化,符合2倍增长的规律:

到底是谁发出的这个RST呢?

后面的不能再写了,就这样吧···


轩辕的《从零开始学逆向》系列视频课程正在火热进行中,如果你也想学习网络安全,学习逆向分析,却不知道从哪里下手,或者学不进去,那就赶紧加入我们吧,与几百位小伙伴一起学习,互相交流,少走弯路!

从零开始学逆向,好评如潮!



你好啊,我是轩辕之风,普通双非自学逆袭,前百度、奇安信、360高级安全研发工程师,电子工业出版社《趣话计算机底层技术》作者,专注网络安全、后端开发技术、计算机底层技术领域的知识创作,欢迎大家关注。


继续滑动看下一个

抓了个包,发现日本也有···

轩辕之风 轩辕的编程宇宙
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存