最新版charles4 https 抓包.0 如何抓包iphone上面的https请求

iOS开发——使用Charles进行http网络抓包详解
我在之前一篇博客《网络抓包工具Charles的介绍与使用》中简单介绍了Charles的安装,以及进行简单的Charles抓包配置的介绍。今天我们来详细介绍下使用Charles进行http抓包,关于https抓包,我将会在另一篇博客中介绍。
(1)http抓包的配置,请参考《网络抓包工具Charles的介绍与使用》这篇博客。
(2)为了使抓包的结果清晰,便于调试,我写了一个简单的网络请求,通过点击按钮请求查询号码归属地,代码如下:
#import &ViewController.h&
@interface ViewController ()
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
- (IBAction)networkRequestPressed:(id)sender {
NSString *urlAsString = [@&.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=&userId=& stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString:urlAsString];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setTimeoutInterval:30];
[urlRequest setHTTPMethod:@&GET&];
//推荐使用这种请求方法;
NSURLSession *session = [NSURLSession sharedSession];
NSString *result = @&&;
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!error) {
//没有错误,返回正确;
result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@&返回正确:%@&,result);
//出现错误;
NSLog(@&错误信息:%@&,error);
[dataTask resume];
(3)点击按钮进行网络请求后,返回结果如下:
(4)下面开始进行抓包(如何配置请参考:网络抓包工具Charles的介绍与使用)。注意哦:需要在真机上测试!进行网络请求后,Charles输出如下:
我现在对上面的http抓包结果进行详解。
左侧是显示结构:Structure是树状结构显示,Sequence是水平结构显示。两者基本类似,我以树状结构来进行介绍。左侧的树状结构是我进行网络请求的url链接,每一个层级表示了以&/&隔开的子域名。通过上述的代码也可以看到我GET请求的url链接是:.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=&userId= ;与树状结构中显示的一致。
右侧是详情页,其中第一个Overview是概览。我对一些字段进行介绍:
(1)URL:我进行网络请求的链接;
(2)Status:当前状态,complete表示请求完成;
(3)Responce Code:返回码。不同的接口,不同的请求结果,返回码都不同;
(4)Protocol:使用的协议;
(5)Method:请求方式,如GET请求,POST请求等;
(6)Kept Alive:判断当前是否正在链接(活跃);
(7)Content-Type:发送的内容类型,如这里用的是XML文本,以UTF8的方式发送;
(8)Client Address:客户端的IP地址;
(9)Remote Address:远程服务器的IP;
(10)Request Start Time:请求开始的时间;
(11)Request End Time:请求结束的时间;
(12)Response Start Time:返回开始的时间;
(13)Response End Time:返回结束的时间;
(14)Request Header :请求的头部大小;
(15)Request Header:返回的头部大小;
(16)Request : 请求发送的大小;
(17)Response:返回数据的大小;
(18)Total:所有数据大小;
(19)Request Compression :请求压缩;
(20)Response Compression: 返回压缩;
第二个页面是关于请求发送的。下面的Headers,Query String,Raw。
(1)Headers:发送请求的头部信息;
(2)Query String:发送参数列表;
(3)Raw:发送的原生数据,包括了头部和参数;
右侧的Response的是关于所有返回信息的。
(1)Headers:是返回的头部信息;
(2)Text:返回信息(除去头部)后的文本;
(3)Hex:返回信息的16进制表示;
(4)XML:我返回的数据是XML。如果你返回的是JSON,这里就会显示JSON;
(5)XML Text:如果你返回JSON,这里会显示JSON Text;
(6)Raw:返回的所有原生数据,包括头部;
里面是发送数据的一些简要信息。
是一些简要信息的图表表示。
现在我对Charles顶部的一些常用的工具栏做一个介绍:
(1)New Session:新建一个会话。也就是在一个新的Charles界面查看网络情况;
(2)Open Session:打开一个之前保存的会话;
(3)Close the current Session:关闭当前的会话;
(4)Save the current Session:保存当前的会话;
(5)Clear the current Session:清空当前的会话(比较方便,常用);
(6)Find Text in the current session:相当于查找功能;
总结,通过Charles来抓包网络请求,让我们对项目的流程有一个大概的认识,这对于入手一个复杂的项目很有帮助。这也有利于我们测试网络情况,调试程序,监测性能。同时,网络抓包也不仅限于iOS的开发,也可以用在其他的开发领域中。当然,可能某些App存在所谓的后门,窃取你手机上的隐私,你是不是也可以通过抓包来判断呢?我将在下一篇博客中介绍如何进行Charles的https抓包。让你的程序支持https以及https的抓包
招聘信息:
iOS9推出的时候,苹果希望大家使用https协议,来提高数据传输之间的安全性。下面我就从最简单的代码介绍,如何在工程中设置,来支持https的请求。一、证书准备篇1.证书转换 在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句 // openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der 这样你就可以得到cer类型的证书了。双击,导入电脑。2.证书放入工程 1、可以直接把转换好的cer文件拖动到工程中。 2、可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出.cer文件的证书了二、代码修改篇先在info.plist中,增加如下图的配置&文本内容如下:NSAppTransportSecurityNSAllowsArbitraryLoads1.使用系统类发送网络请求篇1.1 NSURLConnection设置支持https。在2015年iOS9的更新中,NSURLConnection 被废弃 由 NSURLSession 取代,所以本身是不建议大家继续用这个类做网络请求的(同样也有AFNetWorking 2.x版本),但是考虑到一些旧程序,也不能说改就改,说替换就替换的,所以还是需要普及一下,如果用到了NSURLConnection你需要怎么做。代码如下:-&(void)connection:(NSURLConnection&*)connection&willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge&*)challenge{&&&&if(challenge.protectionSpace.authenticationMethod&==&NSURLAuthenticationMethodServerTrust)&{&&&&&&&&//&告诉服务器,客户端信任证书
&&&&&&&&//&创建凭据对象
&&&&&&&&NSURLCredential&*credntial&=&[NSURLCredential&credentialForTrust:challenge.protectionSpace.serverTrust];&&&&&&&&//&告诉服务器信任证书
&&&&&&&&[challenge.sender&useCredential:credntial&forAuthenticationChallenge:challenge];
}你只需要简单的,添加上如上的代理方法,就可以在不影响你原有请求的基础上,增加了https请求的支持了。1.2 NSURLSession设置支持https。现在推荐使用的就是NSURLSession来处理相关的网络请求了,如果使用系统自带的类,可以参考如下代码:-&(void)URLSession:(NSURLSession&*)session&task:(NSURLSessionTask&*)task&&didReceiveChallenge:(NSURLAuthenticationChallenge&*)challenge&completionHandler:(void&(^)(NSURLSessionAuthChallengeDisposition&disposition,&NSURLCredential&*&__nullable&credential))completionHandler&{
&&&&//&判断是否是信任服务器证书
&&&&if(challenge.protectionSpace.authenticationMethod&==&NSURLAuthenticationMethodServerTrust)&{
&&&&&&&&//&告诉服务器,客户端信任证书
&&&&&&&&//&创建凭据对象
&&&&&&&&NSURLCredential&*credntial&=&[NSURLCredential&credentialForTrust:challenge.protectionSpace.serverTrust];
&&&&&&&&//&通过completionHandler告诉服务器信任证书
&&&&&&&&completionHandler(NSURLSessionAuthChallengeUseCredential,credntial);
&&&&NSLog(@"protectionSpace&=&%@",challenge.protectionSpace);
}2.使用AFNetWorking发送网络请求篇AFNetworking是一个讨人喜欢的网络库,适用于iOS以及Mac OS X. 它构建于在NSURLConnection, NSOperation, 以及其他熟悉的Foundation技术之上. 它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松.。2.1 AFNetWorking 2.x版本考虑到这个版本,我们还可以使用AFHTTPRequestOperationManager这个类来处理网络请求。所以我们要做的就是给这个类,设置一些参数,让它可以支持https的请求,代码如下:支持https(校验证书,不可以抓包)://&1.初始化单例类
&&&&AFHTTPRequestOperationManager&*mgr&=&[AFHTTPRequestOperationManager&manager];
&&&&mgr.securityPolicy.SSLPinningMode&=&AFSSLPinningModeC&&&&//&2.设置证书模式
&&&&NSString&*&cerPath&=&[[NSBundle&mainBundle]&pathForResource:@"xxx"&ofType:@"cer"];&&&&NSData&*&cerData&=&[NSData&dataWithContentsOfFile:cerPath];
&&&&mgr.securityPolicy.pinnedCertificates&=&[[NSArray&alloc]&initWithObjects:cerData,&nil];&&&&//&客户端是否信任非法证书
&&&&mgr.securityPolicy.allowInvalidCertificates&=&YES;&&&&//&是否在证书域字段中验证域名
&&&&[mgr.securityPolicy&setValidatesDomainName:NO];支持https(不校验证书,可以抓包查看)://&1.初始化单例类
&&&&AFHTTPRequestOperationManager&*mgr&=&[AFHTTPRequestOperationManager&manager];
&&&&mgr.securityPolicy.SSLPinningMode&=&AFSSLPinningModeC&&&&//&2.设置非校验证书模式
&&&&mgr.securityPolicy&=&[AFSecurityPolicy&policyWithPinningMode:AFSSLPinningModeNone];
&&&&mgr.securityPolicy.allowInvalidCertificates&=&YES;
&&&&[mgr.securityPolicy&setValidatesDomainName:NO];2.2 AFNetWorking 3.x版本在Xcode7.0之后,苹果废弃了NSURLConnection方法,数据请求使用NSURLSession,作为网络请求类第三方库使用量最大的AFN也及时的更新的新的版本——AFN 3.0版本。新的版本的里废弃了基于NSURLConnection封装的AFHTTPRequestOperationManager,转而使用基于NSURLSession封装的AFHTTPSessionManager了。支持https(校验证书,不可以抓包)://&1.初始化单例类
&&&&&AFHTTPSessionManager&*manager&=&[AFHTTPSessionManager&manager];
&&&&manager.securityPolicy.SSLPinningMode&=&AFSSLPinningModeC&&&&//&2.设置证书模式
&&&&NSString&*&cerPath&=&[[NSBundle&mainBundle]&pathForResource:@"xxx"&ofType:@"cer"];&&&&NSData&*&cerData&=&[NSData&dataWithContentsOfFile:cerPath];
&&&&manager.securityPolicy&=&[AFSecurityPolicy&policyWithPinningMode:AFSSLPinningModeCertificate&withPinnedCertificates:[[NSSet&alloc]&initWithObjects:cerData,&nil]];&&&&//&客户端是否信任非法证书
&&&&mgr.securityPolicy.allowInvalidCertificates&=&YES;&&&&//&是否在证书域字段中验证域名
&&&&[mgr.securityPolicy&setValidatesDomainName:NO];支持https(不校验证书,可以抓包查看)://&1.初始化单例类
&&&&&AFHTTPSessionManager&*manager&=&[AFHTTPSessionManager&manager];&&&&//&2.设置非校验证书模式
&&&&manager.securityPolicy&=&[AFSecurityPolicy&policyWithPinningMode:AFSSLPinningModeNone];
&&&&manager.securityPolicy.allowInvalidCertificates&=&YES;
&&&&[manager.securityPolicy&setValidatesDomainName:NO];##三、使用Charles抓包https3.1 软件下载篇1 工欲善其事必先利其器,需要工具的同学可以在这里,密码: gknp! 下载到V3.9.3版本的Charles软件下载软件后,打开软件,然后command + q退出。 之后将破解文件,放到下面路径 应用程序->Charles->显示包内容->Contents->Resources里面,替换即可。3.2 程序配置篇1.进入Charles的配置界面&2.按图上操作&这样设置之后理论上就可以抓所有网址443端口的https请求了。但是还没完。我们还需要安装一个证书。如下图:&3.进入钥匙串,找到这个证书&单击右键,显示简介。如下图设置为始终信任&以上电脑端的准备就差不多了。我们还需要在iPhone手机上,下载一下描述文件。 具体操作,大家就要点开这个网址,手机下载。&注意:手机点开这个网址&如下图操作&经过上面些步骤,我们已经把相应的软件以及证书都布置好了。之后,只需要在手机连接wifi后,设置手机代理。服务器填写电脑ip地址,端口号为8888.&现在你就可以感受用Charles抓https的请求啦。注意代码要写上面的可以抓包的代码,也就是无证书校验的。如果是有证书校验的,大家就不要妄想抓数据啦。希望大家可以关注我耶,我会继续努力分享更多,更好玩的文章的!文章来自的投稿,原文地址:
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量6265点击量4590点击量4565点击量3500点击量2909点击量2409点击量2381点击量2351点击量2333
&2016 Chukong Technologies,Inc.
京公网安备89本文介绍的是最新的Charles工具4.0.1,下载方式和破解的jar在 这里()
如何抓取http请求?
安装完成之后打开Charles,设置端口号:8888(端口号可以自定义)。选择“Proxy”菜单下的“Proxy Settings”子菜单。打开“Proxy Settings”对话框在“Proxy Settings”对话框中设置端口号:8888,并勾选“Enable transparent Http proxying”项:
打开“网络偏好设置”查看电脑IP地址,并设置手机网络(iOS)代理打开需要抓包的手机APP,初次使用时,Charles会弹出确认对话框,直接点击”Allow”按钮后就可以看到对应的请求数据。
提醒:抓完包之后,请把手机WiFi中的HTTP代理关闭。不然可能造成iOS无法访问网络。
如何抓取HTTPS请求?
电脑安装SSL证书:选中Charles,在“Help”菜单中选择—&“SSL Proxying”—&“Install Charles Root Certificate”会自动打开钥匙串访问窗口在“钥匙串访问”窗口中找到对应的证书(带有Charles字段的证书,一般会出现?的字样),双击打开。设置“使用证书时”项为:始终信任。
点击关闭,输入系统设置的密码。
手机安装证书(使用Safari方式):请确保手机已经设置好手动代理(具体方式参照上面HTTP抓包设置方式)。
在手机Safari浏览器中输入下面的链接地址:
手机会自动跳转安装“Charles Proxy SSL Proxying”描述文件。如下图所示:
点击“安装”按钮,会提示输入手机密码,然后确认安装。
在Charles工具栏上点击设置按钮,选择“SSL Proxying Settings…”:打开“SSL Proxying Settings”对话框;点击“Add”添加:Host中输入*表示匹配所有主机。https默认端口号:443。
点击ok之后,然后测试,加载一个HTTPS的网址,就可以看到如下效果:
至此,配置完成!
本文已收录于以下专栏:
相关文章推荐
iOS开发时,项目中会引用许多第三方库,CocoaPods(/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库。
一、CocoaPods 安装
前言:思考如何引入一个第三方框架。 例如: 百度地图SDK、友盟、ShareSDK、 信鸽推送等。从github或某处下载第三方SDK工程中导入所需要的SDK的文件 .a...
一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成。今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术。需要注意的是,本文...
对tableView三种计算动态行高方法的分析tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了。tableView...
什么是CocoaPods?
CocoaPods是专门为iOS工程提供对第三方库的依赖的管理工具,通过CocoaPods,我们可以更方便地管理每个第三方库的版本,而且不需要我们做太多的配置。直观、集中...
CALayer是所有图层的基类。主要是一些基本显示属性(位置、锚点、颜色、透明度等)、层次关系(子图层和父图层)、基本动画等。
1、查看ruby源
gem sources -l
2、移除掉原有的源
gem sources --remove https://rubygems.org/
ruby -e &$(curl -fsSL /mxcl/homebrew/go/install)&
gem sources --...
在我们开发移动应用的时候,一般都会使用到第三方工具,而由于第三方类库的种类繁多,我们在项目中进行管理也会相对麻烦,所以此时我们就需要一个包管理工具,在iOS开发中,我们使用最多的就是Cocoapods...
发布程序的时候,提示 :
  &项目名 &  is automatically signed for development, but a conflicting code signing ident...
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)如何用charles进行https抓包 - 简书
如何用charles进行https抓包
项目由http转成了https,遇到个问题是用charles不能抓包的问题。按照抓取http包的方式搭好了环境后,在浏览器里出现了这样的提示。
Paste_Image.png
charles截包的信息如下
Paste_Image.png
为什么会出现这样的情况呢?原因是charles相当于一个中间人代理,用户的浏览器如果直接访问目标服务器,验证CA证书有效,所以不会出这种提示,但是在中间加入charles代理后,实际上用户浏览器就会验证Charles提供的证书,这里显然是验证不过的,所以就会出现这种提示。我们必须手动在客户端导入charles的证书,才能不出现这个信任提示,下边介绍下如何去除这种提示的方法。
1.以小米note MIUI 7,mac版本Charles 3.11.1为例,首先在mac上生成charles的root certification
Paste_Image.png
2.将导出的crt文件上传到手机上,并且进行安装。小米note不能通过文件管理器点击crt文件进行安装,需要进入设置-&安全和隐私-&从存储设备安装
Paste_Image.png
3.正常通过验证,可以截取到https的明文数据了
Paste_Image.png
4.更多端的设置证书方法可以参考这篇官方文档
参考资料1.mac下的抓包工具Charles 2.Charles抓取HTTPS数据包 3.手机上安装证书的方法 4.Charles SSL PROXYING 5.Charles SSL CERTIFICATESAccess denied |
used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website () has banned your access based on your browser's signature (3bd7c28-ua98).}

我要回帖

更多关于 charles手机抓包https 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信