一、charles抓包
1、介绍
Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接Charles的代理访问互联网时,Charles可以监控这个程序发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request, response和HTTP headers (包含cookies与caching信息)。
Charles对手机进行抓包时,配置代理一般需要手机和电脑共用一个Wifi,如果手机用4G网络就无法抓包了,因为无法配置代理。因此要使手机和电脑在同一个局域网内,不一定要在同一个ip段,只要是在同一个路由器下就可以了。
优点:简单
缺点:不能抓真机2g/3g/4g网络数据
下载地址:https://www.charlesproxy.com
2、主要功能
支持SSL代理。可以截取分析SSL的请求。
支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。
支持AJAX调试。可以自动将json或xml数据格式化,方便查看。
支持AMF调试。可以将Flash Remoting 或 Flex Remoting信息格式化,方便查看。
支持重发网络请求,方便后端调试。
支持修改网络请求参数。
支持网络请求的截获并动态修改。
检查HTML,CSS和RSS内容是否符合W3C标准。
3、提供“Structure” 和 “Sequence”两种查看封包的视图
1、Structure 视图将网络请求按访问的域名分类。
2、Sequence 视图将网络请求按访问的时间排序。
4、 iPhone上进行HTTP抓包
4.1、在 Mac 上安装抓包软件Charles
4.2、在电脑上打开软件,并在手机上设置 HTTP 代理
无线局域网----查看无线局域网详细信息——拉到最低下配置代理----进入配置代理界面----选择手动,并填写服务器地址(你的电脑 IP 地址),端口(默认 8888)。
4.3、填写完成后并保存后,随便打开一个网址,电脑端应该后弹出提示,请点击 Allow
此时应该已经可以看到手机发出的请求了。
细心的你会发现,HTTPS 请求请求前面有个小锁,我们无法查看请求信息,比如下图的头条。
5、 iPhone上进行HTTPS抓包
5.1、MAC电脑安装证书
Charles的菜单栏点击help----SSL Proxying----Install Charles Root Certificate
此时证书被添加到“钥匙串”,但是还没有结束,因为证书默认是不信任状态,我们还要把证书改成信任状态。
在钥匙串中搜索 “ Charles ”找到证书,双击证书,并选择 始终信任
设置后证书的状态应该是这样子的
5.2、在iPhone上安装证书
在mac上保持 Charles 打开状态,iPhone 和 Mac处于同一网络中。在iPhone 的 Safari 中打开如下网址:
设置 = > 关于本机 => 证书信任设置 =>信任
注意:设置完之后要把证书信任设置开启起来
5.3、SSL 代理设置
Charles 菜单栏 => Proxy => SSL Proxying Settings =>add 添加主机和端口
添加端口号
不出意外的话,应该可以抓到HTTPS接口的数据了,以今日头条为例,如下图:
6、 抓指定接口数据
Charles 菜单栏 => Proxy => Recoding Settings =>Include =>add (添加相关信息,支持通配符)。
比如我们只想抓微博的数据,则填写如下规则
7、模拟网速慢
有时候在开发的时候我们想要模拟一下网络慢的情况,可以通过Charles来设置
Proxy——Throttle Setting,然后选择Enable Throttling,在Throttle Preset下选择网络类型
8、请求重定向
Tools —— Map Remote
二、tcpdump抓包
1、介绍
tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络、端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。在ios应用开发过程中,为了进行端到端的分析,很多时候我们需要对手机的抓包进行分析。由于tcpdump只是抓取数据,我们使用-w开关来指定一个文件,该文件保存抓到的数据,随后我们就把这个文件拷贝到电脑上用wireshark进行分析。
前提:手机越狱并安装tcpdump这样一部iphone就具备了抓包能力。
优点:优点很多,可以做很高级的定制和选择,可以编程控制;
缺点:手机必须越狱,使用比较麻烦;
2、抓包
手机越狱后,桌面会多一个cydia
1、下载tcpdump
从cydia搜索安装tcpdump,如果没有搜到,请先添加源http://apt.saurik.com
2、安装openssh
从cydia搜索安装openssh,如果没有搜到,请先添加源http://apt.saurik.com
3、配置SSH通道,远程访问手机
iPhone手机连接上MAC电脑,电脑上打开PP助手,然后工具----设备工具----打开SSH通道;
这时会有一个弹窗提示如下图:
账号:root;
密码(默认):alpine;
使用ssh root@localhost -p 2222 来登录手机;
注意:这边的alpine是初始密码,如果有改过密码的,则用新密码登录。
关于localhost:
1)、localhost是域名,127.0.0.1是IP;
2)、localhost和127.0.0.1不需要联网,都是本机访问;
打开终端,远程登录手机
4、使用tcpdump抓包
如在WiFi下进行抓包时,输入如下命令:
tcpdump -i en0 -X -s 0 -w /var/moblie/Books/data.pcap
抓取回环网口(指定端口号为8888) 的包: tcpdump -i lo0 -XXnns0 -w /var/mobile/Books/data.pcap port 8888
抓取回环网口的包:tcpdump -i lo0 -w /var/mobile/Books/data.pcap
2G下抓包:tcpdump -i pdp_ip0 -x -s 0 -w /var/mobile/Books/data.pcap
3G下抓包:tcpdump -x -s 0 -w /var/moblie/Books/data.pcap
抓全包写文件:tcpdump -x -s 0 -w /tmp.cap
按host抓包:tcpdump -x -s 0 host www.qq.com
按端口抓包:tcpdump -x -s 0 port 14000
结束抓包:control + c
可用netstat命令来查看当前连接的端口
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 - .target.pcap
tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
-i eth1 : 只抓经过接口eth1的包(eth1:物理网卡1)
-t : 不显示时间戳
-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
-c 100 : 只抓取100个数据包
dst port ! 22 : 不抓取目标端口是22的数据包
src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
-w ./target.pcap : 保存成pcap文件,方便用ethereal(即wireshark)分析
-x : 列出十六进制及ASCII数据包内容,对于监听数据包内容很有用
注意:
1、使用完整越狱的手机进行抓包,否则这边按control + c无法退出,也无法得到数据(我就在这被坑了好久,后面换了一把完整越狱的手机,所以上面的终端命令端口号才换为2223,之前是2222);
2、抓包数据的存储文档指明下路径比较好找,如: /var/moblie/Books/data.pcap
5、提取抓包数据
抓包后的数据哪里去了呢?看下图:
第一个红框文件路径与终端的输入路径一致时,第二个红框data.pcap就是我们要的文件,将它拉到电脑上用wireshark分析吧。
三、wireshark
1、介绍
wireshark和tcpdump是面向所有协议的抓包,charles是针对HTTP协议的抓包。wireshark可以抓wifi、2G、3G、4G数据包。wireshark捕捉的是经过目标网卡所有的流量。
2、抓包(iPhone手机无需越狱)
1、手机与MAC连接;
2、在MAC终端执行:rvictl -s iPhone的UDID;(断开链接执行:rvictl -x iPhone的UDID )
此时,mac会出现一个对应的虚拟网络接口,名字是rvi0(如果有多个iphone则累加,rvi1,rvi2…)
3、打开wireshark可以看到对应的rvi0
4、点进去就可以获取数据数据包
此时,启动iPhone上的任意App,只要有网络流量产生,对应的网络包都会在wireshark上述的列表中展示出来。
wireshark的流量监控界面主要分为四块,由上至下:
第一部分(标号为1)是工具栏,通过工具栏我们可以控制监控的行为,比如开始抓包,停止抓包,重新开始抓包,以及在包之间跳转等等。工具栏的底部有个输入框,可以让我们手动输入包的过滤条件。
第二部分(标号为2)是历史流量包列表展示界面,这里展示的是从抓包开始,所有通过我们iPhone设备的流量。列表界面不同的包有不同的颜色,wireshark通过颜色来区分包的类型,对于特定场景快速识别目标流量非常有用。
第三部分(标号为3)是单个包的详细信息展示面板,我们在第二部分选中的网络包在这一部分会将其结构以可阅读的文本形式展示出来,要正确阅读这一部分的信息需要对tcp/ip协议有一定的掌握。
第四部分(标号为4)是单个包的二进制流信息展示面板,这一部分展示的信息是包的原始数据,也是一个网络包所包含内容的真实展现,我们在第三部分多选中的协议头,都会在这一部分以同步高亮的形式标记出来。这一部分的展示是为了让我们对包的真实内容做直观的判断,能具体到单个byte。
3、无需越狱便可以抓包,那为什么还要用tcpdump抓越狱手机的包呢?
wireshark可以抓非越狱手机的包,包括wifi、2G、3G、4G数据。但没办法抓指定端口的数据包、回环数据包等。因此,我们要用tcpdump抓包,然后在wireshark查看数据。
回环数据包:回环数据包是没有通过网卡的数据包,也就是说这个数据包没有通过网卡发送出去,比如PING 127.0.0.1,这里的127.0.0.1就是回环地址,利用PING命令,这个PING数据包就是回环数据包,没有经过网卡发送出去,而是电脑自己发送自己接受,没有通过第二设备。
4、wireshark介绍
1、Filter(过滤)
wireshark的Filter分为两种,一种为Capture Filter,另一种是Display Filter。
Capture Filter出现在初始界面,在网卡列表的上方有个输入框,允许我们输入capture filter,一旦输入了特定的capture规则,wireshark就只捕获符合该规则的流量包了。
Display Filter出现在流量监控界面,在工具栏的下方有个输入框,允许我们输入display filter,display filter只是从界面上过滤掉不符合规则的包,wireshark实际上还是监听了这些包,一旦去掉display filter,所有的包又会出现在同一界面。
wireshark实际上提供了便捷的UI操作帮助我们来书写Display Filter,在Display Filter输入框的最右边有个表达式按钮,点击之后可以弹出如下界面:
2、包颜色设置
wireshark默认使用一种着色规则帮助我们来进行包类型区分。可以通过视图----着色规则进行修改,如下图:
3、流量跟踪
wireshark默认情况下将不同网络连接的流量都混在一起展示,即使给不同协议的包上色之后,要单独查看某个特定连接的流量依然不怎么方便,我们可以通过wireshark提供的两种方式来实现这个目标。
方式一:追踪流
当我们选中某个包之后,右键弹出的菜单里,有个选项允许我们将当前包所属于的完整流量单独列出来,如下图:
方式二:流量图
5、实例分析
以抓取今日头条为例,下图为抓取到的数据:
1、分析HTTP请求
先display filter中过滤出http。
选中要分析的数据包后查看详细信息展示面板的详细内容。
1、无返回数据
说明:
状态码101,表明更换协议;(服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。)
Upgrade:websocket 表明要更换成websocket协议;
Request URI:/ws/v2?aid=13.... 这里的ws表示websocket的协议,类似HTTP协议中的http://...
2、有返回数据
3、选中数据包进行流追踪
2、分析TCP请求
选择要分析的数据包——追踪流——TCP流