iOS # Charles攔截封包


Charles

  是在Mac下常用的截取網絡封包的工具,在做iOS開發時,我們為了調試與服務器端的網絡通訊協議,常常需要截取網絡封包來分析。Charles通過將自己設置成系統的網絡訪問代理服務器,使得所有的網絡訪問請求都通過它來完成,從而實現了網絡封包的截取和分析。

  

Charles主要的功能包括:

  1. 支持SSL代理。可以截取分析SSL的請求。
  2. 支持流量控制。可以模擬慢速網絡以及等待時間(latency)較長的請求。
  3. 支持AJAX調試。可以自動將json或xml數據格式化,方便查看。
  4. 支持AMF調試。可以將Flash Remoting 或 Flex Remoting信息格式化,方便查看。
  5. 支持重發網絡請求,方便后端調試。
  6. 支持修改網絡請求參數。
  7. 支持網絡請求的截獲並動態修改。
  8. 檢查HTML,CSS和RSS內容是否符合W3C標准

 

安裝Charles & 介紹:

1、官方網站(http://www.charlesproxy.com)下載最新版的Charles安裝包;

2、如需要截取分析SSL協議相關的內容。那么需要安裝Charles的CA證書。具體步驟如下:

  1. 去 http://www.charlesproxy.com/ssl.zip 下載CA證書文件。
  2. 解壓該zip文件后,雙擊其中的.crt文件,這時候在彈出的菜單中選擇“總是信任”

3、Charles封包的視圖:“Structure” & "Sequence"

  1. Structure視圖將網絡請求按訪問的域名分類。
  2. Sequence視圖將網絡請求按訪問的時間排序。

 

原文鏈接:http://www.devtang.com/blog/categories/ios/

 

-------------

TODO:

  --收集 & 分享

1、下載Charles抓包工具(iOS):--已經破解,可直接使用!

  下載地址:http://yun.baidu.com/s/1GvxaY

 

2、截取iPhone上的網絡封包: 《------Main

 1.[Clarles設置]將Charles的代理功能打開。在Charles的菜單欄上選擇 “Proxy”->"Proxy Settings"

  填入代理端口8888,並且勾上"Enable transparent HTTP proxying" 就完成了在Charles上的設置。

 2.[iPhone設置]將獲取到的電腦IP地址(終端$ifconfig en0--查看網卡en0的IP地址),在iPhone手機同一局域網下,設置HTTP代理協議

  填入電腦的IP,並且寫入端口8888

 

3、截取SSL信息:

  Charles默認並不截取SSL的信息,如果你想對截取某個網站上的所有SSL網絡請求,可以在該請求上右擊,選擇SSL proxy。

 

4、模擬慢速網絡獲取數據:

  原因:在做iPhone開發的時候,我們常常需要模擬慢速網絡或者高延遲的網絡,以測試在移動網絡下,應用的表現是否正常。

  TODO:在Charles的菜單,選擇"Proxy"->"Throttle Setting"項,勾選上“Enable Throttling”,並且可以設置Throttle Preset的類型。

 

5、修改網絡請求內容

  有些時候為了調試服務器的接口,我們需要反復嘗試不同參數的網絡請求。

  Charles提供:“網絡請求的修改”和“重發”功能。只需要在以往的網絡請求上點擊右鍵,選擇“Edit”,即可創建一個可編輯的網絡請求。

 

PS:我們可以修改該請求的任何信息,包括url地址,端口,參數等,之后點擊“Execute”即可發送該修改后的網絡請求(如下圖所示)。

   Charles支持我們多次修改和發送該請求,這對於我們和服務器端調試接口非常方便。

 

6、過濾網絡請求《----Main

通常情況下,我們需要對網絡請求進行過濾,只監控向指定目錄服務器上發送的請求。對於這種需求,我們有2種辦法。

  1. 在主界面的中部的Filter欄中填入需要過濾出來的關鍵字。例如我們的服務器的地址是:http://www.baidu.com,那么只需要在Filter欄中填入baidu即可。

  2. 在Charles的菜單欄選擇"Proxy"->"Recording Settings",然后選擇Include欄,選擇添加一個項目,然后填入需要監控的協議,主機地址,端口號。這樣就可以只截取目標網站的封包了

  TODO:[“Proxy”->“Recording Setting”->“Include”->“Add”->填寫內容:http, baidu.com, 80

 

--------------------

 “網易新聞”--數據攔截: 

  [ c.m.163.com/nc/article/headline/T1348647853363/0-100.html ]

- (void)loadData {
    NSURL *url = [NSURL URLWithString:@"http://c.m.163.com/nc/article/headline/T1348647853363/0-20.html"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
       
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
//        NSLog(@"%@", dict);
        
        // 拿到字典中第一項的數組
        // 使用 keyEnumerator.nextObject 可以快速遍歷字典的鍵值
        NSLog(@"%@", dict.keyEnumerator.nextObject);
        
        // 取字典鍵值的小技巧,對於網易新聞,可以直接過濾掉第一層字典
        NSArray *array = dict[dict.keyEnumerator.nextObject];
        NSLog(@"%@", array);
        
        // 遍歷數組,字典轉模型
        NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:array.count];
        
        [array enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL *stop) {
            News *news = [News newsWithDict:dict];
            
            [arrayM addObject:news];
            
            NSLog(@"%@", news.objectInfo);
        }];
    }];
}

 

|--> Copyright (c) 2015 Bing Ma.

|--> GitHub RUL: https://github.com/SpongeBob-GitHub

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM