Wireshark抓包iOS入門教程

原文地址:http://www.mrpeak.cn/blog/wireshark/

網(wǎng)絡抓包是個基礎(chǔ)技能寇漫,對于網(wǎng)絡協(xié)議的掌握有一定的要求遍膜。iOS上實現(xiàn)網(wǎng)絡抓包可以用Charles(針對http和https),tcpdump(快速分析網(wǎng)絡包)肛响,和Wireshare岭粤。之前寫過一篇介紹tcpdump抓包的入門文章,和tcpdump相比特笋,Wireshark提供豐富的GUI交互剃浇,而且能分析所有的網(wǎng)絡協(xié)議,關(guān)鍵還是免費的猎物,掌握好Wireshark就能應付絕大部分需要分析網(wǎng)絡協(xié)議的場景了。

安裝初識

Wireshark提供Mac版本,可以從官網(wǎng)下載安裝铺遂,到這篇博客為止最新版本應該是2.2.1主穗。安裝好之后打開的第一個界面如下:

Wireshark在第一個界面就把當前系統(tǒng)所包含的網(wǎng)卡列出來了,直接點擊任何一項就可以開始監(jiān)聽通過該網(wǎng)卡的所有網(wǎng)絡流量堤如。

當我們把iPhone通過usb連接macbook時蒲列,Wireshark并不能直接監(jiān)聽通過iPhone的網(wǎng)絡流量,需要通過一個系統(tǒng)程序在我們的Mac系統(tǒng)上搀罢,建立一個映射到iPhone的虛擬網(wǎng)卡蝗岖,在terminal中輸入如下命令即可:

localhost:~ clf$ rvictl -s 11df105bc414cd5807aea1ec5706b88c3666a196

Starting device 11df105bc414cd5807aea1ec5706b88c3666a196 [SUCCEEDED] with interface rvi0

格式是rvictl -s [設(shè)備udid],設(shè)備的udid可以通過itunes或者itools獲取榔至,執(zhí)行命令之后Wireshark能立即識別新增加的rvi0網(wǎng)卡抵赢,也就是上圖中高亮的部分,雙擊rvi0這一項,Wireshare即進入如下界面開始監(jiān)聽iPhone設(shè)備上的所有流量铅鲤。

rvi0就是Remote Virtual Interface划提,這也就意味著在你的Mac上虛擬了一個iOS設(shè)備接口。
Mac系統(tǒng)在更新版本為10.15之后彩匕,rvictl 的路徑發(fā)生了改變腔剂,需要設(shè)置。


rvictl路徑設(shè)置

此時驼仪,啟動iPhone上的任意App掸犬,只要有網(wǎng)絡流量產(chǎn)生,對應的網(wǎng)絡包都會在Wireshark上述的列表中展示出來绪爸。

Wireshark的流量監(jiān)控界面主要分為四塊湾碎,由上至下第一部分(標號為1)是工具欄,通過工具欄我們可以控制監(jiān)控的行為奠货,比如開始抓包介褥,停止抓包,重新開始抓包递惋,以及在包之間跳轉(zhuǎn)等等柔滔。工具欄的底部有個輸入框,可以讓我們手動輸入包的過濾條件萍虽,這部分對于熟練使用Wireshark抓包非常重要睛廊,后面會詳細的講解。

第二部分(標號為2)是歷史流量包列表展示界面杉编,這里展示的是從抓包開始超全,所有通過我們iPhone設(shè)備的流量。列表界面不同的包有不同的顏色邓馒,Wireshark通過顏色來區(qū)分包的類型嘶朱,對于特定場景快速識別目標流量非常有用,后面也會專門講解光酣。

第三部分(標號為3)是單個包的詳細信息展示面板疏遏,我們在第二部分選中的網(wǎng)絡包在這一部分會將其結(jié)構(gòu)以可閱讀的文本形式展示出來,要正確閱讀這一部分的信息需要對tcp/ip協(xié)議有一定的掌握救军。

第四部分(標號為4)是單個包的二進制流信息展示面板改览,這一部分展示的信息是包的原始數(shù)據(jù),也是一個網(wǎng)絡包所包含內(nèi)容的真實展現(xiàn)缤言,我們在第三部分多選中的協(xié)議頭宝当,都會在這一部分以同步高亮的形式標記出來。這一部分的展示是為了讓我們對包的真實內(nèi)容做直觀的判斷胆萧,能具體到單個byte庆揩。

初步認識上述四塊主要面板之后俐东,可以嘗試開始分析網(wǎng)絡包,在開始分析網(wǎng)絡包之前订晌,先要對網(wǎng)絡包有個大致的概念虏辫。

網(wǎng)絡包結(jié)構(gòu)

我們最初學習網(wǎng)絡協(xié)議的時候,無論是OSI七層模型锈拨,還是經(jīng)典的TCP/IP五層結(jié)構(gòu)砌庄,都是以下圖中的左邊部分的形式展示的。

這是一種經(jīng)典的分層架構(gòu)奕枢,確實也符合網(wǎng)絡協(xié)議設(shè)計上的思路娄昆,但卻不能表達網(wǎng)絡包真實的包含關(guān)系。上圖右邊部分是我所繪制的一個包結(jié)構(gòu)示意圖缝彬。在我看來萌焰,這種洋蔥式的結(jié)構(gòu)更符合網(wǎng)絡包的真實形態(tài)。Application是最內(nèi)層的payload谷浅,除了Application這一層之外扒俯,其他層都是用自己這一層的協(xié)議header+所包含那一層的payload∫环瑁可以用如下公式表示:

TCP Layer = TCP Header + Application Payload

IP Layer = IP Header + TCP Payload

...

我們分析每個網(wǎng)絡包的時候要能理解每一個包它所代表的抽象含義撼玄,再進一步將相關(guān)聯(lián)的包串聯(lián)起來,形成一次完整的網(wǎng)絡會話墩邀。

分析包結(jié)構(gòu)

對于iOS程序員來說掌猛,我們絕大部分的流量分析都集中在HTTP或者基于TCP的socket長連接。從這一層面來說磕蒲,和我們最貼近的三層是應用層(http)留潦,傳輸層(tcp or udp)只盹,網(wǎng)絡層(ip)辣往。

對于應用層來說主要是http協(xié)議的學習,對于http request和response格式的閱讀殖卑,比如下圖表示的一個http request包:

Packet詳情面板以符合http協(xié)議的表述站削,將header中各個field清晰的羅列出來了,閱讀起來很方便孵稽。

傳輸層我們應用較多的是tcp许起,這一層的閱讀主要是tcp header的學習:

典型的tcp header一般長度為20個字節(jié),將這20個字節(jié)逐一學習一遍就可以分析大部分的tcp流量了菩鲜。

網(wǎng)絡層的分析主要是針對于IP Header园细,header結(jié)構(gòu)如下:

這其中IP Header第十三個字節(jié)各個filed的理解,對于我們分析tcp流量的起始和結(jié)束尤其有用接校,典型的IPV4 Header也是20個字節(jié)猛频,梳理一遍就可以分析IP包了狮崩。

所以對于包結(jié)構(gòu)的分析關(guān)鍵在于三個知識點的學習:http header, tcp header, ip header,這么一看好像也沒多少東西 ;

使用Filter過濾包

使用Wireshark和使用Charles最大的區(qū)別在于鹿寻,Charles只捕獲HTTP流量睦柴,而Wireshark捕捉的是經(jīng)過目標網(wǎng)卡所有的流量,流量包可以在幾秒內(nèi)膨脹到難以閱讀的數(shù)量毡熏,所以此時我們需要使用Filter來做包的過濾坦敌,F(xiàn)ilter規(guī)則定的越細,剔除掉的干擾信息就越多痢法,分析起來就越快狱窘。

Wireshark的Filter分為兩種,一種為Capture Filter疯暑,另一種是Display Filter训柴。

Capture Filter出現(xiàn)在初始界面,在網(wǎng)卡列表的上方有個輸入框妇拯,允許我們輸入capture filter幻馁,一旦輸入了特定的capture規(guī)則,Wireshark就只捕獲符合該規(guī)則的流量包了越锈。

Display Filter出現(xiàn)在流量監(jiān)控界面仗嗦,在工具欄的下方有個輸入框,允許我們輸入display filter甘凭,display filter只是從界面上過濾掉不符合規(guī)則的包稀拐,Wireshark實際上還是監(jiān)聽了這些包,一旦去掉display filter丹弱,所有的包又會出現(xiàn)在同一界面德撬。

Capture Filter的規(guī)則和我們平常使用tcpdump的filter語法是一致的,比如為了只監(jiān)控http的流量躲胳,我們可以先在初始化界面選中rvi0網(wǎng)卡蜓洪,再在capture filter輸入框里輸入:

//只捕獲HTTP流量
port 80 or port 443

回車之后Wireshark就開始監(jiān)控我們iPhone上所有的http和https流量了 ,非常簡單坯苹,我們還可以使用其他的capture filter來捕獲特定的流量隆檀,比如想分析DNS解析過程,可以使用:

//只捕獲DNS流量
port 53

比如只想捕獲和特定服務器相關(guān)的流量:

//只捕獲和特定主機的流量
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

更多的語法規(guī)則可以查看Wireshark官方文檔裳仆,Wireshark實際上提供了便捷的UI操作幫助我們來書寫Display Filter,在Display Filter輸入框的最右邊有個Expression按鈕孤钦,點擊之后可以彈出如下界面:

Display Filter的語法本質(zhì)上是個等是關(guān)系描述歧斟,我們可以在search當中輸入我們感興趣的協(xié)議比如http记某,再在展開的協(xié)議頭里選擇我們的條件比如http.host,最后設(shè)置Relation和Value就可以生成一個Display Filter條件了构捡。

包顏色規(guī)則

Wireshark在大多數(shù)時候捕獲的包數(shù)量都遠超我們感興趣的數(shù)量液南,而且各個連接的包都混雜在一起,為了方便我們識別不同的連接會話勾徽,Wireshark默認使用一種著色規(guī)則幫助我們來進行包類型區(qū)分滑凉。

具體的規(guī)則可以通過菜單View->Coloring Rules...查看,默認規(guī)則如下:

這里有個小技巧喘帚,如上圖所示畅姊,我只將我感興趣的協(xié)議包上了色,集中在http吹由,tcp若未,udp包,這樣分析起來更加直觀倾鲫。比如根據(jù)上圖的規(guī)則粗合,tcp三次握手中的Sync包是使用灰色標記的,這樣我就可以在下圖的包中迅速定位一次tcp連接的開始包位置:

當然乌昔,包的顏色也可以按照自己的視覺習慣進行定制隙疚,我個人習慣把Sync包和FIN包設(shè)置一個高亮的顏色,方便判斷一次HTTP會話的起始和結(jié)束磕道。

流量跟蹤

Wireshark默認情況下將不同網(wǎng)絡連接的流量都混在一起展示供屉,即使給不同協(xié)議的包上色之后,要單獨查看某個特定連接的流量依然不怎么方便溺蕉,我們可以通過Wireshark提供的兩種方式來實現(xiàn)這個目標伶丐。

方式一:Follow Stream

當我們選中某個包之后,右鍵彈出的菜單里疯特,有個選項允許我們將當前包所屬于的完整流量單獨列出來哗魂,如下圖:

Wireshark支持我們常見的四種Stream,TCP辙芍,UDP啡彬,HTTP羹与,SSL故硅。比如我們選中Follow TCP Stream之后可以得到如下的詳細分析輸出(樣本為監(jiān)控iPhone手機的流量):

上圖中將iPhone和Server之間某次的連接流量完整的呈現(xiàn)出來,包括iPhone發(fā)送了多少個包纵搁,Server回了多少個包吃衅,以及iPhone上行和下行的流量,還提供流量編解碼選擇腾誉,文本搜索功能等徘层。

方式二:Flow Graph

Flow Graph可以通過菜單Statistics->Flow Graph來生成峻呕,這樣我們可以得到另一種形式的流量呈現(xiàn):

和Follow Stream不同的是我們獲取到的是完整的流量,從上圖中可以看出從10.136.66.127(我的iPhone手機IP地址)發(fā)出的流向多個服務器的網(wǎng)絡流量趣效,包括DNS解析和SSL安全握手等瘦癌。當然我們也可以在上圖中下方的操作區(qū)域做進一步的過濾,可以使用Display Filter做進一步的流量定位跷敬。

Follow Stream更適合分析針對某一個服務器地址的流量讯私,而Flow Graph更適合分析某個App的整體網(wǎng)絡行為,包含從DNS解析開始到和多個服務器交互等西傀。

其實Statistics菜單下還有更多的圖表分析模式斤寇,可以根據(jù)不同的分析目標來選擇,比如Statistics->HTTP->Requests可以得到如下按主機分門別類的HTTP請求分析圖拥褂,和收費的Charles的展示結(jié)果類似娘锁。

HTTPS包分析

介紹完使用方式再來實際分析下HTTPS的流量。下圖是我使用Wireshark在iPhone上抓包知乎App網(wǎng)絡請求的結(jié)果:

當我使用Follow TCP Stream之后饺鹃,一次完整的HTTPS會話流量就被單獨過濾出來了莫秆,第一步先分析包列表界面。

通過高亮顏色找到會話的其實Sync包悔详,繼而可以快速的定位到HTTP建立連接之初的tcp三次握手所產(chǎn)生的三個包:

Sync: iPhone發(fā)送Sync馏锡。

Sync+Ack: Server發(fā)送Sync+Ack。

Ack: iPhone Ack伟端。

三次握手之后是ssl handshake杯道,ssl handshake分為以下幾步:

Client Hello

這一個包是ssl握手的起始包,客戶端(我的iPhone)會攜帶當前會話所依賴的一些關(guān)鍵信息:使用的tls版本(當前為tls1.2)责蝠,上次的Session ID(如果可以session重用党巾,就可以避免當前這次的安全握手),客戶端所支持的加密算法套件(從下圖中可以看出可以從22個suites里面挑選)等霜医。

Server Hello

Server Hello這個包帶上服務器這一端的一些信息齿拂,比如Server所選擇的tls版本,或者帶上可以重用的Session ID避免重新握手肴敛,在Client傳過來的Cipher Suites當中挑選一個Cipher Suite進行后續(xù)的安全通話等署海。

Server 下發(fā)Certificate

Server同時會下發(fā)自己的Certificate,如下圖所示:

從包列表界面可以看出医男,Certificate(大小為2407個bytes)這個包由于超過了1440個字節(jié)砸狞,被拆成了2個包,所以我們可以在包Info里面看到[TCP segment of a reassembled PDU]镀梭,我們使用Wireshark抓包的時候經(jīng)常會看到reassembled PDU刀森,出現(xiàn)這種情況是因為包太大,超過了MSS报账,需要拆成兩個來發(fā)送研底。

接下來幾個包是Client和Server基于上面交換的信息協(xié)商最后使用的密鑰埠偿。

Server Key Exchange

Client Key Exchange

Change Cipher Spec

...

Send Application Data

各個包里面所包含的詳細內(nèi)容分析涉及到非對稱加密算法的相關(guān)知識,這里就不展開了榜晦,使用Wireshark可以將整個HTTPS的握手過程非常清晰的展現(xiàn)出來冠蒋,感興趣的同學可以閱讀這篇文章

當然大部分時候我們需要分析iPhone上HTTPS流量里的具體包內(nèi)容乾胶,Wireshark雖然支持配置RSA私鑰浊服,但我們沒辦法直接獲取iPhone設(shè)備上各個App所使用的私鑰,這種場景下我們一般使用MITM(Man In The Middle)中間人攻擊來破解HTTPS包內(nèi)容胚吁,收費工具Charles可以通過代理的方式來實現(xiàn)此功能牙躺,免費版抓包工具mitmproxy同樣也可以,Charles的使用教程比較多了腕扶,后續(xù)我們會再寫一篇mitmproxy的教程介紹如何使用破解調(diào)試HTTPS的流量孽拷。

結(jié)束語

Wireshark就介紹到這里,現(xiàn)在在iPhone上抓包的方式有很多半抱,有面向所有協(xié)議的tcpdump和Wireshark脓恕,也有針對HTTP的Charles和mitmproxy,無論使用哪個工具窿侈,前提都是我們需要對網(wǎng)絡協(xié)議有全面的認識炼幔,所以在學習使用這些工具的同時,要持續(xù)深入的學習網(wǎng)絡協(xié)議知識史简。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乃秀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子圆兵,更是在濱河造成了極大的恐慌跺讯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殉农,死亡現(xiàn)場離奇詭異刀脏,居然都是意外死亡,警方通過查閱死者的電腦和手機超凳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門愈污,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轮傍,你說我怎么就攤上這事暂雹。” “怎么了金麸?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵擎析,是天一觀的道長簿盅。 經(jīng)常有香客問我挥下,道長揍魂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任棚瘟,我火速辦了婚禮现斋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偎蘸。我一直安慰自己庄蹋,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布迷雪。 她就那樣靜靜地躺著限书,像睡著了一般。 火紅的嫁衣襯著肌膚如雪章咧。 梳的紋絲不亂的頭發(fā)上倦西,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音赁严,去河邊找鬼扰柠。 笑死,一個胖子當著我的面吹牛疼约,可吹牛的內(nèi)容都是我干的卤档。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼程剥,長吁一口氣:“原來是場噩夢啊……” “哼劝枣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起织鲸,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤哨免,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昙沦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琢唾,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年盾饮,在試婚紗的時候發(fā)現(xiàn)自己被綠了采桃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡普办,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徘钥,到底是詐尸還是另有隱情衔蹲,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站拘荡,受9級特大地震影響撬陵,放射性物質(zhì)發(fā)生泄漏珊皿。R本人自食惡果不足惜蟋定,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望草添。 院中可真熱鬧溢吻,春花似錦、人聲如沸果元。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽而晒。三九已至蝇狼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倡怎,已是汗流浹背迅耘。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留监署,地道東北人颤专。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像钠乏,于是被迫代替她去往敵國和親栖秕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)絡抓包是個基礎(chǔ)技能晓避,對于網(wǎng)絡協(xié)議的掌握有一定的要求簇捍。iOS上實現(xiàn)網(wǎng)絡抓包可以用Charles(針對http和ht...
    MrPeak閱讀 45,621評論 5 134
  • Wireshark用戶手冊 上面是Wireshark用戶手冊的鏈接,整體情況請點擊俏拱。 一暑塑,準備工作 Wiresha...
    盧二牛閱讀 6,001評論 0 13
  • 3.1. 介紹 現(xiàn)在,您已經(jīng)安裝了Wireshark并有可能熱衷于開始捕捉您的第一個數(shù)據(jù)包锅必。在接下來的章節(jié)中事格,我們...
    wwyyzz閱讀 1,376評論 0 1
  • Wireshark 1.x針對 UNIX Like 系統(tǒng)的 GUI 發(fā)行版界面采用的是X Window(1987年...
    huangman閱讀 1,384評論 1 0
  • 目錄 準備 分析2.1. 三次握手2.2. 創(chuàng)建 HTTP 代理(非必要)2.3. TLS/SSL 握手2.4. ...
    RunAlgorithm閱讀 37,881評論 12 117