抓包那些事——四大抓包神器簡介

圖片看不到的話可以看我CSDN上的鏈接:
https://blog.csdn.net/u013332124/article/details/84112926

一志秃、概述

無論是開發(fā)還是測試捡絮,在工作中經常會遇到需要抓包的時候考润。本篇博客主要介紹如何在各個平臺下,高效的抓包锐借。目前的抓包軟件總體可以分為兩類鞋诗,一種是設置代理抓取http包,比如Charles关噪、mitmproxy這些軟件。另一種是直接抓取經過網卡的所有協(xié)議包乌妙,其中最出名就是大名鼎鼎的wireshark以及l(fā)inux自帶的抓包軟件tcpdump使兔。下面重點介紹一下這四個抓包工具的特點以及使用

二、Wireshark

wireshark想必大多數(shù)程序員都不會陌生藤韵。wireshark在各個平臺都可以安裝使用虐沥,它可以抓取經過指定網卡的所有協(xié)議。wireshark雖然很強大泽艘,但是對初學者其實不是很友好欲险。這也正是由于它太強大,它可以抓取所有包匹涮,所以初學者在使用時面對茫茫數(shù)據(jù)流不知所措天试。初學者需要認真的去學習怎么過濾得到自己感興趣的包,但是如果不熟悉wireshark的過濾語法焕盟,要過濾數(shù)據(jù)包將舉步維艱秋秤。

過濾語法簡單介紹

wireshark的過濾語法總結起來其實也很簡單宏粤,就是以協(xié)議開頭,后面可以跟著協(xié)議的屬性灼卢,然后加上一些判斷符號绍哎,比如contains、==鞋真、>崇堰、<等等。比如只想展示http的協(xié)議內容涩咖,則直接在過濾器輸入框中輸入http即可海诲。如下圖:

在這里插入圖片描述

比如我只想看http協(xié)議的請求頭中uri包含'/api'的協(xié)議,就可以這么寫:

在這里插入圖片描述

如果想通過目標ip或者來源ip來過濾包檩互,就不可以以http協(xié)議為前綴了特幔,因為這些是ip協(xié)議的相關屬性。通過目標ip來過濾可以這么寫:

在這里插入圖片描述

上面表示目標機器的ip是61.135.217.100并且協(xié)議是http的包闸昨。

wireshark支持很多種協(xié)議蚯斯,我們可以通過右上角的expression來打開搜索支持的協(xié)議,還可以找出協(xié)議支持的屬性,然后填入期待的值饵较,軟件會自動為我們構建過濾語句拍嵌。

在這里插入圖片描述
在這里插入圖片描述

優(yōu)缺點

優(yōu)點:

  1. 多平臺支持,開源免費
  2. 功能強大循诉,可以抓取所有協(xié)議的包
  3. 抓到的包容易分析

缺點:

  1. 由于線上服務器沒有GUI横辆,只有命令行,因此無法在線上服務器使用
  2. 無法分析https數(shù)據(jù)包茄猫,由于wireshark是在鏈路層獲取的數(shù)據(jù)包信息狈蚤,所以獲取到的https包是加密后的數(shù)據(jù),因此無法分析包內容募疮。當然炫惩,我們可以對https數(shù)據(jù)包進行解密僻弹, 但是操作具有一定的復雜度阿浓,可能要消耗很多時間。

三蹋绽、Tcpdump

tcpdump是linux上自帶的一個抓包軟件(mac也有)芭毙,功能強大,也可以抓取經過指定網卡的所有協(xié)議包卸耘。由于是命令行工具退敦,tcpdump抓取到的包不易于分析,一個常見的做法是將tcpdump抓到的包輸出到某個文件蚣抗,然后將文件拷貝下來用wireshark分析侈百。

tcpdump的簡單使用介紹

下面的語句參考文章:https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

一些簡單的過濾參數(shù):

# -i 參數(shù)表示抓取指定網卡的內容。具體網卡可以通過 ifconfig 命令查看
# 如果不指定網卡,默認tcpdump只會監(jiān)視第一個網絡接口
tcpdump -i eth1
# 打印所有www.baidu.com相關的包,這個host后面可以填 域名钝域,也可以填ip
tcpdump host www.baidu.com
tcpdump host 192.168.0.1
# 打印 nn1和nn2或nn3 主機間通信的包讽坏,這里可以替換成ip
tcpdump host nn1 and \( nn2 or nn3 \)
# 打印nn1和非nn2之間的ip數(shù)據(jù)包
tcpdump ip host nn1 and not nn2
# 發(fā)送者是nn1的數(shù)據(jù)包
tcpdump -i eth0 src host nn1
# 接受者是nn1的數(shù)據(jù)包
tcpdump -i eth0 dst host nn1
# 指定tcp端口是23以及host是210.27.48.1數(shù)據(jù)包
tcpdump tcp port 23 and host 210.27.48.1

抓包內容輸出到文件:

# 抓取指定網卡的包輸出到test.cap
tcpdump -i en0 -w test.cap

之后我們可以把test.cap直接用wireshark打開,就可以很直觀的分析包了例证。

用tcpdump輸出cap文件包:

tcpdump -r test.cap

優(yōu)缺點

優(yōu)點:

  1. 功能強大路呜,可以抓所有協(xié)議的包
  2. linux自帶,直接在所有的服務器上面抓包织咧,這是其他抓包軟件不具備的

缺點:

  1. 數(shù)據(jù)包分析困難胀葱,需要配合wireshark使用
  2. 和wireshark一樣,無法分析https數(shù)據(jù)包

四笙蒙、Charles

Charles是一款http抓包工具抵屿,它是通過代理來實現(xiàn)的抓包。也就是我們在訪問網頁時需要配置代理捅位,將代理指向Charles監(jiān)聽的端口晌该,之后我們的http請求都會發(fā)向Charles的端口,之后Charles會幫我們轉發(fā)并記錄協(xié)議內容绿渣。

Charles的使用非常簡單朝群,配置好代理后,Charles就開始抓包了中符。我們可以直接通過Charles的GUi查看包的內容:

在這里插入圖片描述

上圖中的unknown表示https加密后的數(shù)據(jù)姜胖,所以看到不協(xié)議的具體內容。我們可以通過安裝Charles的證書淀散,讓Charles也可以查看https協(xié)議的具體內容右莱。

在這里插入圖片描述

優(yōu)缺點

優(yōu)點:

  1. 使用簡單,只需配置一下代理地址就可以
  2. 要抓取https協(xié)議的配置也很簡單档插,只要安裝下charles的證書就可以了

缺點:

  1. 只支持抓取http協(xié)議

五慢蜓、mitmproxy

mitmproxy是python寫的一款http抓包工具,雖然只支持http抓包郭膛,但是它的特性非常強大晨抡,它不僅可以抓包,還可以對請求進行攔截则剃、重現(xiàn)等操作耘柱。和Charles一樣,它的原理也是基于代理棍现,使用的時候需要設置代理指向它调煎。

mitmproxy是命令行工具,但是也自帶了mitmweb工具己肮,可以讓用戶在網頁上操作士袄。另外悲关,mitmproxy還支持用戶自行編寫插件,可以編寫腳本對請求進行處理娄柳,然后把修改后的請求發(fā)出去坚洽。

安裝

首先需要在機器安裝python3以及pip3.之后通過pip3安裝

pip3 install mitmproxy

安裝python3的教程可以看我的博客:

Centos 安裝python3

如果安裝mitmproxy過程中報錯ModuleNotFoundError: No module named '_ssl',就需要安裝一下OpenSSL西土,然后再重新編譯安裝一下python3

yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++
# 去Python3的安裝目錄再次安裝編譯一次python3
make && make install

安裝好openSSL后再執(zhí)行pip3 install mitmproxy

使用

安裝后讶舰,直接在命令行輸入mitmproxy就會進入它的交互界面:

在這里插入圖片描述

這時候mitmproxy已經開始監(jiān)聽8080端口(默認),接著,我們可以去瀏覽器設置代理需了。瀏覽器設置代理的方式有很多,這里不多做介紹跳昼。

設置完代理后,訪問瀏覽器的請求都會被發(fā)到mitmproxy上肋乍,mitmproxy根據(jù)規(guī)則對請求進行攔截(不配置攔截規(guī)則的話則都不攔截)鹅颊,所有經過的請求都會被輸出:

在這里插入圖片描述

在交互界面上可以通過快捷鍵操作請求。輸入問號'?'墓造,可以查看快捷鍵的文檔堪伍。

在這里插入圖片描述

下面介紹一些常用的快捷鍵和功能

1. 請求過濾

在請求列表交互界面,按下f鍵后觅闽,可以輸入一些過濾規(guī)則:

在這里插入圖片描述

具體的過濾語法可以按下'?'鍵后帝雇,再按下方向鍵右'—>'或者l鍵。

在這里插入圖片描述

2. 請求攔截

按下i鍵后蛉拙,可以對指定的請求進行攔截尸闸。按mitmproxy收到指定條件的請求時,不會立馬把它轉發(fā)出去孕锄,而是等待我們執(zhí)行resume操作后吮廉,才會把請求轉發(fā)出去——在這期間我們甚至可以對請求進行手動修改。

在這里插入圖片描述

紅色字體表示該請求被攔截

之后我們可以按入a鍵來恢復該請求畸肆,可以輸入A鍵恢復所有被攔截的請求宦芦。

3. 查看/編輯請求

把指示光標移動到某個請求上,按回車可以查看請求的內容轴脐〉鞅埃或者鼠標直接點擊請求也可以。

在這里插入圖片描述

之后通過左右方向鍵可以查看request豁辉、response令野、detail等信息舀患。

如果要編輯請求徽级,可以在這個界面輸入e,然后會讓我們選擇編輯哪塊內容:

在這里插入圖片描述

之后就會進入vim編輯界面編輯相應的內容了(保存后會生效)聊浅。

4. 重發(fā)請求

mitmproxy的光標指向某個請求時餐抢,按下r鍵可以重發(fā)這個請求(重發(fā)前可以對該請求進行編輯)现使。

在這里插入圖片描述

按下':'鍵后,可以輸入命令旷痕,這樣我們就可以通過過濾規(guī)則批量的重發(fā)請求

在這里插入圖片描述

replay.client是mitmproxy內置的一個命令碳锈,我們也可以自行編寫命令。命令的編寫可以參考官網文檔欺抗,這里不做介紹售碳。

5. 插件開發(fā)

我們可以編寫插件,然后再啟動的時候指定插件绞呈,mitmproxy處理請求的時候會執(zhí)行一個插件的鏈贸人,這樣我們就可以對請求進行編輯然后再發(fā)送出去了。

借用官網的插件demo:

from mitmproxy import ctx


class Counter:
    def __init__(self):
        self.num = 0

    def request(self, flow):
        self.num = self.num + 1
        ctx.log.info("We've seen %d flows" % self.num)


addons = [
    Counter()
]

這個方法對每一個請求進行處理佃声,然后打印序號艺智。通過mitmproxy -s test.py來讓插件生效。通過插件可以綁定各種連接事件圾亏。感興趣的朋友可以自行去mitmproxy官網看文檔十拣,這里不多做介紹。

6. 保存抓到的請求數(shù)據(jù)

通過w快捷鍵我們可以把這次抓到的請求包保存到文件上志鹃。

通過mitmproxy -r file可以讀取以前抓取的請求信息進行分析夭问。

優(yōu)缺點

優(yōu)點:

  1. 命令行操作,可以在無GUI界面的服務器上使用
  2. 安裝好mitmproxy提供的證書后曹铃,也可以分析https請求
  3. 不僅可以抓包甲喝,還支持對包的攔截、修改铛只、重復埠胖,這是常規(guī)抓包軟件不具備的

缺點:

  1. 僅支持http協(xié)議的抓包

附錄

mitmproxy官方文檔地址:

https://docs.mitmproxy.org/stable/

六、總結

對于這幾個抓包神器淳玩,我總結了下使用場景:

  1. 只抓http協(xié)議的話直撤,推薦使用mitmproxy。mitmproxy豐富的功能不僅可以滿足我們的抓包需求蜕着,還可以提升我們的工作效率谋竖。比如測試可以抓包后一鍵重發(fā)請求來重現(xiàn)bug,開發(fā)調試的時候可以修改請求內容等等承匣。
  2. 如果是在線上的沒有GUI的服務器蓖乘,推薦使用tcpdump,雖然mitmproxy也可以支持命令行抓包韧骗,但是生產環(huán)境的服務器最好不要亂安裝第三方插件嘉抒。另外,大多數(shù)服務器都有裝tcpdump袍暴。我們可以通過把請求的內容輸出到文件些侍,然后拷貝會自己的電腦用wireshark分析隶症。
  3. 想要抓取http以外的協(xié)議的話,直接上wireshark岗宣。功能強大
  4. 對于Charles蚂会,感覺用了mitmproxy之后,就基本用不上Charles了耗式。Charles好像也可以編輯后再發(fā)送胁住,但是感覺不是很好用,可能我用的不是很熟吧刊咳。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末措嵌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子芦缰,更是在濱河造成了極大的恐慌企巢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件让蕾,死亡現(xiàn)場離奇詭異浪规,居然都是意外死亡,警方通過查閱死者的電腦和手機探孝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門笋婿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顿颅,你說我怎么就攤上這事缸濒。” “怎么了粱腻?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵庇配,是天一觀的道長。 經常有香客問我绍些,道長捞慌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任柬批,我火速辦了婚禮啸澡,結果婚禮上,老公的妹妹穿的比我還像新娘氮帐。我一直安慰自己嗅虏,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布上沐。 她就那樣靜靜地躺著皮服,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冰更,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天产徊,我揣著相機與錄音昂勒,去河邊找鬼蜀细。 笑死,一個胖子當著我的面吹牛戈盈,可吹牛的內容都是我干的奠衔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼塘娶,長吁一口氣:“原來是場噩夢啊……” “哼归斤!你這毒婦竟也來了?” 一聲冷哼從身側響起刁岸,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤脏里,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后虹曙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迫横,經...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年酝碳,在試婚紗的時候發(fā)現(xiàn)自己被綠了矾踱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡疏哗,死狀恐怖呛讲,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情返奉,我是刑警寧澤贝搁,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站芽偏,受9級特大地震影響徘公,放射性物質發(fā)生泄漏。R本人自食惡果不足惜哮针,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一关面、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧十厢,春花似錦等太、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至包颁,卻和暖如春瞻想,著一層夾襖步出監(jiān)牢的瞬間压真,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工蘑险, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滴肿,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓佃迄,卻偏偏與公主長得像泼差,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呵俏,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容