网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
本文由转转QA刘宝成分享,原题“抓包工具wireshark的使用”,下文进行了排版和内容优化。
1、引言
跟网络通信有关的应用场景下(比如Web系统、IM聊天应用、消息推送系统等),经常要用到网络抓包工具,用以验证客户端和服务器之间收发的数据包是否正确。以IM聊天系统为例,TLS/SSL加密开启到底有没有成功?加密效果怎么样?端到端加密后的聊天内容安全强度够不够?等等这些疑问,都需要通过网络抓包抓出样本来分析和验证。
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。

技术交流:
- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》
- 开源IM框架源码:https://github.com/JackJiang2011/MobileIMSDK(备用地址点此)
2、系列文章
本文是系列文章中的第16篇,本系列文章的大纲如下:
网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势
网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门
网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!
网络编程懒人入门(十三):一泡尿的时间,快速搞懂TCP和UDP的区别
网络编程懒人入门(十四):到底什么是Socket?一文即懂!
网络编程懒人入门(十五):外行也能读懂的网络硬件设备功能原理速成
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark(* 本文)
3、Wireshak的安装和基本使用
安装:直接通过官方下载对应的安装包即可 https://www.wireshark.org/download.html。
使用:

如上图所示:
- 1)左上角为几个最常用的按钮:开始捕获、停止捕获、重新捕获、捕获选项;
- 2)中间为捕获过滤器,用于过滤需要捕获的数据包;
- 3)捕获过滤器下面可以选择需要捕获的网络连接。
下图是用Wireshark捕获的数据包:

可以看到,数据包结构是与OSI的七层模型相对应的,会详细显示每层的信息。
更多Wireshak的基本用法和手册,可以详读以下两篇:
4、快速理解Wireshak的过滤器
由于Wireshark直接捕获底层网络数据包,导致其捕获的数据包数量通常较大。为了便于筛选数据包,Wireshark提供了两种过滤器。
4.1捕获过滤器
用于设置什么样的数据包保存在捕获结果中,避免产生过大的日志文件。
需要在开始捕获之前设置,相对简单:

捕获过滤器语法如上,一般用于过滤协议、IP、端口等基本信息。
例如:
- 1)显示目的TCP端口为8080的包:tcp dst port 8080
- 2)显示来源IP地址为192.168.171.201的封包:ip src host 192.168.171.201
4.2显示过滤器
用于在捕获日志中查找数据包,可以在捕获过程中或者捕获后随时更改。
功能更加强大和复杂:

显示过滤器语法如上,比捕获过滤器更为强大,可以针对不同协议,过滤不同的字段。
例如:
- 1)源地址是192.168.171.0网段的数据包:ip.src == 192.168.171.0/24
- 2)所有的HTTP POST请求:http.request.method== "POST"
- 3)显示包含TCP SYN标志的包:tcp.flags.syn == 0×02
- 4)URL中包含baidu的http请求:http.request.uri contains "baidu"
5、用什么例子来动手学习Wireshak?
本来想借用RainbowChat 这种IM聊天中的TLS/SSL数据包来的分析来实战Wireshak,但考虑到IM通常都是私有协议,不利于理解。
因而接下来的内容将以HTTPS为例,来详细讲解如何借助Wireshak抓出的数据包(正好也顺验证之前那么多跟TLS/SSL加密有关的文章),详细理解和学习Wireshak的使用,同进加深对HTTPS协议本身的理解。
6、什么是HTTPS
SSL/TLS:SSL (Secure Sockets Layer),最初由Netscape公司设计,后来逐渐演变为TLS(Transport Layer Security Protocol),即“传输层安全协议”。
该协议工作在TCP层之上,应用层之下。在TCP连接完成后,进行通信双方的身份认证,并协商一些跟加密相关的工作。完成协商之后,就可以对双方发送的信息进行加密/解密了。
HTTPS:可以理解为HTTP over SSL/TLS。即在SSL/TLS协议之上运行HTTP协议,以保证通信的安全性。
更多深入的学习,可以从下面这几篇精选的资料开始:
- 如果这样来理解HTTPS原理,一篇就够了
- 你知道,HTTPS用的是对称加密还是非对称加密?
- 为什么要用HTTPS?深入浅出,探密短连接的安全性
- 一分钟理解 HTTPS 到底解决了什么问题
- 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等
7、HTTPS的SSL/TLS握手过程
SSL/TLS的握手过程主要需要解决两个问题:
- 1)证明通信双方身份的真实性;
- 2)协商后续通信过程中使用的密钥;
如下图所示:左侧是一个简单的握手流程,右侧为对应的抓包结果,我们可以对比分析一下SSL/TLS的握手过程。

1)C:ClientHello
客户端发送协议版本号、sessionid、随机数、加密算法列表、扩展字段等信息:

2)S:ServerHello
与客户端类似,不同之处在于确定了所使用的加密算法等:

3)S:Certificate
服务端向客户端发送自己的CA证书。客户端通过证书信任链查看该证书的真实性,以验证服务端的身份。其实SSL/TLS协议还支持客户端的CA证书验证,不过在实际中使用较少。

4)S:ServerKey Exchange
服务端根据之前选择的加密算法,传输密钥协商需要的参数。从之前的报文可以看到,这里选择的是EC-DH算法。

5)S:ServerHello Done
该报文表示服务端发送完成。

6)C:ClientKey Exchange
同理,客户端也要根据之前选择的加密算法,传输相应的参数。

7)C:ChangeCipher Spec
经过上述步骤,客户端和服务器双方已经完成了身份认证,并且交换了生成密钥的全部参数。双方会根据对应的算法,各自生成加密密钥,然后就可以进行加密通信了。这个报文表示切换到密文模式,后续消息都通过加密传输。

8)C:Finished
客户端表示握手完成。这里会发送一段Verify Data,是使用新生成的密钥加密后的一段信息。双方通过该信息验证加密算法、密钥是否有效。

9)S:Change Cipher Spec
10)S:Finished
服务段也会发送对应的两条消息作为回应,不再赘述。
8、解密HTTPS报文

握手完成之后,就可以查看客户端发出的HTTP请求了。但我们看到的只是一段加密后的字符串?那么如何对HTTPS报文进行解密呢?
要想解密HTTPS报文,就必须要获取到加密密钥。Chrome、Firefox等浏览器支持将访问网站时使用的密钥输出到文件中。仅需要配置环境变量SSLKEYLOGFILE 即可。
如下:

然后需要将该密钥文件导入到Wireshark中。打开编辑-首选项,选择Protocol-SSL,填写刚才设置的文件路径。

现在,就可以通过Wireshark查看HTTPS请求中的具体信息了!

9、参考资料
[1] TCP/IP详解 - 第17章·TCP:传输控制协议
[3] 理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程
[4] 网络通讯数据抓包和分析工具 Wireshark 使用教程(中文) [附件下载]
[10] IM聊天系统安全手段之通信连接层加密技术
[12] 传输层安全协议SSL/TLS的Java平台实现简介和Demo演示
[13] 微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解
[14] 手把手教你为基于Netty的IM生成自签名SSL/TLS证书
(本文已同步发布于:http://www.52im.net/thread-4752-1-1.html)
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark的更多相关文章
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...
- 网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议
1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...
- 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...
- 网络编程懒人入门(六):深入浅出,全面理解HTTP协议
本文引用了自简书作者“涤生_Woo”的文章,内容有删减,感谢原作者的分享. 1.前言 HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广 ...
- 手把手教你如何使用Charles抓包
一.为什么使用charles 前几天因为需要通过抓包定位问题,打开了尘封已久的fiddler,结果打开软件后什么也干不了,别说手机抓包了,打开软件什么请求也抓不到. 很多时候都是如此,如果一个方案不行 ...
- [原创]手把手教你写网络爬虫(4):Scrapy入门
手把手教你写网络爬虫(4) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 上期我们理性的分析了为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 咦?怎么有人扔西红柿 ...
- [原创]手把手教你写网络爬虫(5):PhantomJS实战
手把手教你写网络爬虫(5) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 大家好!从今天开始,我要与大家一起打造一个属于我们自己的分布式爬虫平台,同时也会对涉及到的技术进行详细介绍.大 ...
- [原创]手把手教你写网络爬虫(7):URL去重
手把手教你写网络爬虫(7) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 本期我们来聊聊URL去重那些事儿.以前我们曾使用Python的字典来保存抓取过的URL,目的是将重复抓取的UR ...
- 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据
http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
随机推荐
- KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- es之增删改查
查询 index: GET task_results/_search/ 普通查询: {"query":{"bool":{"must":[{& ...
- 解决ros-melodic-desktop-full安装过程中未满足的依赖关系问题
sudo apt install ros-melodic-desktop-full 正在读取软件包列表- 完成正在分析软件包的依赖关系树 正在读取状态信息- 完成 有一些软件包无法被安装.如果您用的是 ...
- DRF-Authention组件源码分析及扩展
drf 认证组件 1.认证组件源码执行流程 在该图中,我把与认证组件无关的代码都删除了,只留下了认证的代码,方便解析.每行注释的开头数字即代表了执行顺序 注意事项: 第5步中的self.authent ...
- IntelliJ IDEA 2024激活码(亲测有效,仅供学习和交流)
资源是从官网购买,仅供学习和交流 激活码链接地址
- 5.2 Vi和Vim之间到底有什么关系?
我们知道,Vi 编辑器是 Unix 系统最初的编辑器.它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行.在文件中移动.插入.编辑和替换文本. 尽管 Vi 可能是世界上复杂的编辑器(讨厌它的人 ...
- 780E开发板之errDump错误日志上报,操作方法解析
一.errDump功能 LuatOS-Air错误日志上报功能模块名叫:errDump,errDump对"量产投放市场的设备,远程调试初步定位问题"至关重要,强烈建议客户一定要使 ...
- 微信小程序原生AI运动(动作)检测识别解决方案
前几年受疫情影响,人员流动受限,反而让"AI运动"概念风靡一时.空前火爆.目前已经在AI运动锻炼.体育教学.线上运动主题活动等场景中,成功得到了应用,并获得了广大互联网用户的认可. ...
- Django admin 结合富文本编辑器tinymce
后台需要加入富文本编辑器于是选择tinymce 官方网站:http://django-tinymce.readthedocs.org/ django-tinymce · PyPI GitHub:Git ...
- CF926 Div.2
C. Sasha and the Casino 赌场规则:如果下注 \(y(y > 0)\) 元,如果赢了则除了 \(y\) 元外,额外获得 \(y \times (k - 1)\) 元,否则则 ...