使用 wireshark 抓包+简单分析三次握手与三次挥手
0X 00 抓包神器wireshark
由于学习需要,最近开始接触网络知识 ,差不多学习到各种协议,什么TCP啊,UDP啊,HTTP一大堆的。说实话,一直听理论知识还会挺枯燥的,毕竟 所谓**“纸上学来终觉浅,绝知此事要躬行”** 古话还是没错的。
所以喽,那就试试呗,第一步当然要工具,总不能凭空抓包吧。
于是
说实话现在搜索工具就是智能,你都还没问它就把答案给出来了。
没错!今天的主角就是——wireshark
抓包神器,这样形容它绝对没错。为啥?
在过去,网络数据包分析软件是非常昂贵,或是专门属于营利用的软件,然而Wireshark的出现却改变了这种生态。 ——维基百科
为啥,为啥Linux这么受欢迎?开源啊,免费啊,我们要追随各位大佬奉献社会的脚步(狗头)
那到底有啥用捏,那可就多了去了:
找出在一个网络内发送数据包最多的主机、查看网络通信、查看某个主机使用了哪些程序、基本正常的网络通信、验证特有的网络操作、了解尝试连接无线网络的用户…
一时半会还真列不完,这里有人总结了一下:Wireshark的作用
总之,用它!用它!用它!
这里给上官网地址:wireshark官网
windows、mac有相应的安装包,Linux可以直接指令安装
Ubuntu:
sudo apt install wireshark
Centos:
sudo yum install wireshark
后面的细节就不多少了。我们直接上主题了
0X 10 使用wireshark进行抓包
1. 选择一个网口
打开软件你会看到这样的一个界面,上面的是一些不同网口,比如有无线的,有线的等等
我们选择一个网口,比如我这里选择第一个,这是我的无线网络。双击,就会进入到一个抓包界面
哎呀妈呀,一堆东西稀里哗啦的就出来了。不过不要慌!这些都是宝贵的数据,我们要的就是这些东西
这些就是我们需要的数据包了。当然,这一下子这么多,也不是所有的都是我们所需要的。
所以我们需要甄别2. 设定一些规则
我们可以看到这里有一栏,这里是给我们输入规则的,所谓的规则其实就是为了显示我们需要的信息
比如我们在里面输入ip.addr == 103.228.211.105
,那么就会显示只与 ip 为103.228.211.105
有关的包了。
再比如我们输入tcp
,那么就显示TCP协议的包
(至于为啥还是为夹杂着一些http协议的包,我也不清楚,因为我也刚开始嘛,大家有兴趣可以去查一下 )
那到底可以制定那些规则呢?还是给篇博客,给有兴趣的同学去了解:
wireshark过滤规则及使用方法
3. 查看包信息
我们把包抓下来是要查看的,查看的方法就是选中一条,然后信息就会出现在下面:
这里会有包的所有信息,也就是说,如果没加密的话,网络中的所有信息都可以被窥探,是不是很危险,所以现在在搭理推广HTTPS,就是为了安全考虑的。
我们在这不多说如何查看这些信息,只是告诉大家,这是就是我们分析信息的地方。
0X 20 简单分析三次握手与四次挥手
好,上面工具会用了,现在我们需要来实践实践了。
开始我就说了,很多理论的东西很枯燥,但是动动手也许就会变得很有意思。
今天就来讲讲这TCP协议中的 三次握手和四次挥手
怎么做呢?很简单,只需要3步:
- 1、打开wireshark,开始抓包
- 2、打开浏览器
- 3、输入一个网址,按Enter,等到网页加载完后退出
ok,整个过程数据包都给我们抓下来了~
1. 抓包
比如我这输入的是 www.163.com
等待加载完之后就退出,现在看我们的wireshark:
已经把我们刚才整个过程的包都抓取了下来
2. 筛选
但是太杂了不是,因为我们只是看握手和挥手过程,所以我们可以选取一个http网页的请求过程,这是要先建立TCP连接的,然后再断掉,所以这是很好的例子
我们在筛选条件里面写好http
可以看到,现在出现的全是http协议的包。并且我们运气很好,因为第一条和第二条,刚好是一个请求一个响应(可以看到这两个前面都有小箭头,往右的表示出去的,也就是请求;往左的表示进来的,也就是响应)这时候我们再去掉筛选条件,就可以看到整个完整的过程了:
好,终于到了最重要的一部分了。
三次握手
从上图可以很清楚的看到,在HTTP的POST请求之前,有着明显的三次TCP请求(161、162、163记录)
这就是我们所说的三次握手了
1、第一次握手
看到是从448816->80
也就是从客户端向web 服务器的80端口发数据包
这是客户端向服务器喊话:“服务器在嘛,我想要连接你请求一些东西”
2、第二次握手
可以看到是80->448816
这是服务器听到了客户端的请求,所以就回话了:
“ 好,我可以听到,你说吧”
3、第三次握手
这次又变成了448816->80
因为客户端知道了服务器那边的准备好了,所以就准备发送了,但是在真正发之前,还要说一声,不让都不知道客户端啥时候发:
“你准备好,我这就开始发数据了”
当服务器接受时候就知道了,前面都是客套话,后面就是正事了
数据请求与响应
当客套话讲完之后,客户端就开始发请求了,也就是第4条,http请求。
这是post请求,也就是进行数据提交
然后又出现了一次tcp连接,这是干什么呢?
可以看到是80->448816
,也就服务器发送给客户端的。
其实这是web服务器得到消息后告诉客户端:
“这事啊,好了好了,我知道了,你先等一下,等一下给你答复”
过了一下,web服务器就发送了一个http数据包,也将结果发给客户端了,这就是响应
客户端得到响应后,要告诉服务器一声:
“好勒,谢谢~”
也就是第7条的tcp通信
四次挥手
我们这次的请求就这么简单(当然大多数时间不会这么简单)。现在事情干完了,该走了,但是又不能直接走吧,还是要说说客套话
1、第一次挥手
就是第8个包,看到的是448816->80
(又是客户端开始的,真爱说客套话2333).
该走了,客户端就说:“好啦好啦,多谢老哥,我要这些就够了”
这就是第一次挥手
2、第二次挥手
第九个包,80->448816
,这是服务器得到消息之后回复给客户端
“嗯嗯,知道了,那我不传了”
这就是第二次挥手
3、第三次挥手
第十个包,448816->80
,客户端这时候就该断开连接了。所以就对服务器说:
“老哥,谢谢啦,那我走了吼”
这就是第四次挥手
4、第四次挥手
第十一个包,80->448816
,服务器知道了要回复客户端:
“没事没事,去吧,下次再来”
然后客户端就可以断开连接啦
0X 30 后言
这就是整个过程,虽然可能有点渲染了,但是大概还是符合的,如果大家还想深入了解,就好好的利用这个工具吧~
神器在手,天下我有!
今天就到这啦,大家下次见~