Wireshark 抓包 iOS 入门教程(wireshark使用教程入门)

网友投稿 566 2022-06-15


网络抓包是个基础技能,对于网络协议的掌握有一定的要求。iOS上实现网络抓包可以用Charles(针对http和https),tcpdump(快速分析网络包),和Wireshare。之前写过一篇介绍 tcpdump抓包的入门文章 ,和tcpdump相比,Wireshark提供丰富的GUI交互,而且能分析所有的网络协议,关键还是免费的,掌握好Wireshark就能应付绝大部分需要分析网络协议的场景了。

安装初识

Wireshark提供 Mac版本 ,可以从官网下载安装,到这篇博客为止最新版本应该是2.2.1。安装好之后打开的第一个界面如下:

当我们把iPhone通过usb连接macbook时,Wireshark并不能直接监听通过iPhone的网络流量,需要通过一个系统程序在我们的Mac系统上,建立一个映射到iPhone的虚拟网卡,在terminal中输入如下命令即可:

Wireshark的流量监控界面主要分为四块,由上至下第一部分(标号为1)是工具栏,通过工具栏我们可以控制监控的行为,比如开始抓包,停止抓包,重新开始抓包,以及在包之间跳转等等。工具栏的底部有个输入框,可以让我们手动输入包的过滤条件,这部分对于熟练使用Wireshark抓包非常重要,后面会详细的讲解。

第二部分(标号为2)是历史流量包列表展示界面,这里展示的是从抓包开始,所有通过我们iPhone设备的流量。列表界面不同的包有不同的颜色,Wireshark通过颜色来区分包的类型,对于特定场景快速识别目标流量非常有用,后面也会专门讲解。

第三部分(标号为3)是单个包的详细信息展示面板,我们在第二部分选中的网络包在这一部分会将其结构以可阅读的文本形式展示出来,要正确阅读这一部分的信息需要对tcp/ip协议有一定的掌握。

第四部分(标号为4)是单个包的二进制流信息展示面板,这一部分展示的信息是包的原始数据,也是一个网络包所包含内容的真实展现,我们在第三部分多选中的协议头,都会在这一部分以同步高亮的形式标记出来。这一部分的展示是为了让我们对包的真实内容做直观的判断,能具体到单个byte。

初步认识上述四块主要面板之后,可以尝试开始分析网络包,在开始分析网络包之前,先要对网络包有个大致的概念。

网络包结构

我们最初学习网络协议的时候,无论是OSI七层模型,还是经典的TCP/IP五层结构,都是以下图中的左边部分的形式展示的。

TCP Layer = TCP Header + Application Payload

IP Layer = IP Header + TCP Payload

我们分析每个网络包的时候要能理解每一个包它所代表的抽象含义,再进一步将相关联的包串联起来,形成一次完整的网络会话。

分析包结构

对于iOS程序员来说,我们绝大部分的流量分析都集中在HTTP或者基于TCP的socket长连接。从这一层面来说,和我们最贴近的三层是应用层(http),传输层(tcp or udp),网络层(ip)。

对于应用层来说主要是http协议的学习,对于http request和response格式的阅读,比如下图表示的一个http request包:

传输层我们应用较多的是tcp,这一层的阅读主要是tcp header的学习:

网络层的分析主要是针对于IP Header,header结构如下:

所以对于包结构的分析关键在于三个知识点的学习:http header, tcp header, ip header,这么一看好像也没多少东西 ;)

使用Filter过滤包

使用Wireshark和使用Charles最大的区别在于,Charles只捕获HTTP流量,而Wireshark捕捉的是经过目标网卡所有的流量,流量包可以在几秒内膨胀到难以阅读的数量,所以此时我们需要使用Filter来做包的过滤,Filter规则定的越细,剔除掉的干扰信息就越多,分析起来就越快。

Wireshark的Filter分为两种,一种为Capture Filter,另一种是Display Filter。

Capture Filter出现在初始界面,在网卡列表的上方有个输入框,允许我们输入capture filter,一旦输入了特定的capture规则,Wireshark就只捕获符合该规则的流量包了。

//只捕获HTTP流量

port 80 or port 443

回车之后Wireshark就开始监控我们iPhone上所有的http和https流量了 ,非常简单,我们还可以使用其他的capture filter来捕获特定的流量,比如想分析DNS解析过程,可以使用:

//只捕获DNS流量

port 53

比如只想捕获和特定服务器相关的流量:

//只捕获和特定主机的流量

host 171.10.191.10

Display Filter的语法是由Wireshark自定义的,和Capture filter的语法不能混用。比如我们只想看某个主机的流量,可以使用如下Display Filter:

ip.addr==171.10.191.10

如果只看http或者https的流量,可以用:

tcp.port == 80 || tcp.port == 443

更多的语法规则可以查看 Wireshark官方文档 ,Wireshark实际上提供了便捷的UI操作帮助我们来书写Display Filter,在Display Filter输入框的最右边有个Expression按钮,点击之后可以弹出如下界面:

包颜色规则

Wireshark在大多数时候捕获的包数量都远超我们感兴趣的数量,而且各个连接的包都混杂在一起,为了方便我们识别不同的连接会话,Wireshark默认使用一种着色规则帮助我们来进行包类型区分。

具体的规则可以通过菜单View->Coloring Rules…查看,默认规则如下:

流量跟踪

Wireshark默认情况下将不同网络连接的流量都混在一起展示,即使给不同协议的包上色之后,要单独查看某个特定连接的流量依然不怎么方便,我们可以通过Wireshark提供的两种方式来实现这个目标。

方式一:Follow Stream

当我们选中某个包之后,右键弹出的菜单里,有个选项允许我们将当前包所属于的完整流量单独列出来,如下图:

方式二:Flow Graph

Flow Graph可以通过菜单Statistics->Flow Graph来生成,这样我们可以得到另一种形式的流量呈现:

Follow Stream更适合分析针对某一个服务器地址的流量,而Flow Graph更适合分析某个App的整体网络行为,包含从DNS解析开始到和多个服务器交互等。

其实Statistics菜单下还有更多的图表分析模式,可以根据不同的分析目标来选择,比如Statistics->HTTP->Requests可以得到如下按主机分门别类的HTTP请求分析图,和收费的Charles的展示结果类似。

介绍完使用方式再来实际分析下HTTPS的流量。下图是我使用Wireshark在iPhone上抓包知乎App网络请求的结果:

通过高亮颜色找到会话的其实Sync包,继而可以快速的定位到HTTP建立连接之初的tcp三次握手所产生的三个包:

Sync:iPhone发送Sync。

Sync+Ack:Server发送Sync+Ack。

Ack:iPhone Ack。

三次握手之后是ssl handshake,ssl handshake分为以下几步:

Client Hello

这一个包是ssl握手的起始包,客户端(我的iPhone)会携带当前会话所依赖的一些关键信息:使用的tls版本(当前为tls1.2),上次的Session ID(如果可以session重用,就可以避免当前这次的安全握手),客户端所支持的加密算法套件(从下图中可以看出可以从22个suites里面挑选)等。

Server Hello

Server Hello这个包带上服务器这一端的一些信息,比如Server所选择的tls版本,或者带上可以重用的Session ID避免重新握手,在Client传过来的Cipher Suites当中挑选一个Cipher Suite进行后续的安全通话等。

Server同时会下发自己的Certificate,如下图所示:

接下来几个包是Client和Server基于上面交换的信息协商最后使用的密钥。

Server Key Exchange

Client Key Exchange

Change Cipher Spec

Send Application Data

各个包里面所包含的详细内容分析涉及到非对称加密算法的相关知识,这里就不展开了,使用Wireshark可以将整个HTTPS的握手过程非常清晰的展现出来,感兴趣的同学可以阅读 这篇文章 。

当然大部分时候我们需要分析iPhone上HTTPS流量里的具体包内容,Wireshark虽然支持配置RSA私钥,但我们没办法直接获取iPhone设备上各个App所使用的私钥,这种场景下我们一般使用MITM(Man In The Middle)中间人攻击来破解HTTPS包内容,收费工具Charles可以通过代理的方式来实现此功能,免费版抓包工具mitmproxy同样也可以,Charles的使用教程比较多了,后续我们会再写一篇mitmproxy的教程介绍如何使用破解调试HTTPS的流量。

结束语

Wireshark就介绍到这里,现在在iPhone上抓包的方式有很多,有面向所有协议的tcpdump和Wireshark,也有针对HTTP的Charles和mitmproxy,无论使用哪个工具,前提都是我们需要对网络协议有全面的认识,所以在学习使用这些工具的同时,要持续深入的学习网络协议知识。

来自:http://mp.weixin.qq.com/s?__biz=MzI5MjEzNzA1MA==&mid=2650264247&idx=1&sn=2c8d91f15647a6fadd435f8d09b2e695&chksm=f4068382c3710a9477b9b69aa4022301516edd94b96221ccc8e99526bfa54d65a9c0ce420536#rd


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:系统剖析 Android 中的内存泄漏(系统的分析和梳理)
下一篇:Python 异步调用命令行工具(python下载)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~