四大網(wǎng)絡(luò)抓包神器,總有一款適合你~

      網(wǎng)友投稿 1264 2022-05-30

      點(diǎn)擊上方“民工哥技術(shù)之路”選擇“星標(biāo)”

      每天10點(diǎn)為你分享不一樣的干貨

      一、概述

      無論是開發(fā)還是測(cè)試,在工作中經(jīng)常會(huì)遇到需要抓包的時(shí)候。本篇博客主要介紹如何在各個(gè)平臺(tái)下,高效的抓包。目前的抓包軟件總體可以分為兩類,一種是設(shè)置代理抓取http包,比如Charles、mitmproxy這些軟件。

      另一種是直接抓取經(jīng)過網(wǎng)卡的所有協(xié)議包,其中最出名就是大名鼎鼎的wireshark以及l(fā)inux自帶的抓包軟件tcpdump。下面重點(diǎn)介紹一下這四個(gè)抓包工具的特點(diǎn)以及使用。

      二、Wireshark

      wireshark想必大多數(shù)程序員都不會(huì)陌生。wireshark在各個(gè)平臺(tái)都可以安裝使用,它可以抓取經(jīng)過指定網(wǎng)卡的所有協(xié)議。wireshark雖然很強(qiáng)大,但是對(duì)初學(xué)者其實(shí)不是很友好。

      這也正是由于它太強(qiáng)大,它可以抓取所有包,所以初學(xué)者在使用時(shí)面對(duì)茫茫數(shù)據(jù)流不知所措。初學(xué)者需要認(rèn)真的去學(xué)習(xí)怎么過濾得到自己感興趣的包,但是如果不熟悉wireshark的過濾語法,要過濾數(shù)據(jù)包將舉步維艱。

      過濾語法簡(jiǎn)單介紹

      wireshark的過濾語法總結(jié)起來其實(shí)也很簡(jiǎn)單,就是以協(xié)議開頭,后面可以跟著協(xié)議的屬性,然后加上一些判斷符號(hào),比如contains、==、>、<等等。比如只想展示http的協(xié)議內(nèi)容,則直接在過濾器輸入框中輸入http即可。如下圖:

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

      如果想通過目標(biāo)ip或者來源ip來過濾包,就不可以以http協(xié)議為前綴了,因?yàn)檫@些是ip協(xié)議的相關(guān)屬性。通過目標(biāo)ip來過濾可以這么寫:

      上面表示目標(biāo)機(jī)器的ip是61.135.217.100并且協(xié)議是http的包。

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

      優(yōu)缺點(diǎn)

      優(yōu)點(diǎn):

      1、功能強(qiáng)大,可以抓取所有協(xié)議的包

      2、抓到的包容易分析

      缺點(diǎn):

      1、由于線上服務(wù)器沒有GUI,只有命令行,因此無法在線上服務(wù)器使用

      2、無法分析https數(shù)據(jù)包,由于wireshark是在鏈路層獲取的數(shù)據(jù)包信息,所以獲取到的https包是加密后的數(shù)據(jù),因此無法分析包內(nèi)容。當(dāng)然,我們可以對(duì)https數(shù)據(jù)包進(jìn)行解密, 但是操作具有一定的復(fù)雜度,可能要消耗很多時(shí)間。

      三、Tcpdump

      tcpdump是linux上自帶的一個(gè)抓包軟件(mac也有),功能強(qiáng)大,也可以抓取經(jīng)過指定網(wǎng)卡的所有協(xié)議包。由于是命令行工具,tcpdump抓取到的包不易于分析,一個(gè)常見的做法是將tcpdump抓到的包輸出到某個(gè)文件,然后將文件拷貝下來用wireshark分析。

      tcpdump的簡(jiǎn)單使用介紹

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

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

      # -i 參數(shù)表示抓取指定網(wǎng)卡的內(nèi)容。具體網(wǎng)卡可以通過 ifconfig 命令查看

      # 如果不指定網(wǎng)卡,默認(rèn)tcpdump只會(huì)監(jiān)視第一個(gè)網(wǎng)絡(luò)接口

      tcpdump -i eth1

      # 打印所有www.baidu.com相關(guān)的包,這個(gè)host后面可以填 域名,也可以填ip

      tcpdump host www.baidu.com

      tcpdump host 192.168.0.1

      # 打印 nn1和nn2或nn3 主機(jī)間通信的包,這里可以替換成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

      抓包內(nèi)容輸出到文件:

      # 抓取指定網(wǎng)卡的包輸出到test.cap

      tcpdump -i en0 -w test.cap

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

      用tcpdump輸出cap文件包:

      tcpdump -r test.cap

      優(yōu)缺點(diǎn)

      優(yōu)點(diǎn):

      缺點(diǎn):

      四、Charles

      Charles是一款http抓包工具,它是通過代理來實(shí)現(xiàn)的抓包。也就是我們?cè)谠L問網(wǎng)頁(yè)時(shí)需要配置代理,將代理指向Charles監(jiān)聽的端口,之后我們的http請(qǐng)求都會(huì)發(fā)向Charles的端口,之后Charles會(huì)幫我們轉(zhuǎn)發(fā)并記錄協(xié)議內(nèi)容。

      Charles的使用非常簡(jiǎn)單,配置好代理后,Charles就開始抓包了。我們可以直接通過Charles的GUi查看包的內(nèi)容:

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

      優(yōu)缺點(diǎn)

      優(yōu)點(diǎn):

      1、使用簡(jiǎn)單,只需配置一下代理地址就可以

      2、要抓取https協(xié)議的配置也很簡(jiǎn)單,只要安裝下charles的證書就可以了

      缺點(diǎn):

      五、mitmproxy

      mitmproxy是python寫的一款http抓包工具,雖然只支持http抓包,但是它的特性非常強(qiáng)大,它不僅可以抓包,還可以對(duì)請(qǐng)求進(jìn)行攔截、重現(xiàn)等操作。和Charles一樣,它的原理也是基于代理,使用的時(shí)候需要設(shè)置代理指向它。

      mitmproxy是命令行工具,但是也自帶了mitmweb工具,可以讓用戶在網(wǎng)頁(yè)上操作。另外,mitmproxy還支持用戶自行編寫插件,可以編寫腳本對(duì)請(qǐng)求進(jìn)行處理,然后把修改后的請(qǐng)求發(fā)出去。

      安裝

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

      pip3 install mitmproxy

      如果安裝mitmproxy過程中報(bào)錯(cuò)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就會(huì)進(jìn)入它的交互界面:

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

      設(shè)置完代理后,訪問瀏覽器的請(qǐng)求都會(huì)被發(fā)到mitmproxy上,mitmproxy根據(jù)規(guī)則對(duì)請(qǐng)求進(jìn)行攔截(不配置攔截規(guī)則的話則都不攔截),所有經(jīng)過的請(qǐng)求都會(huì)被輸出:

      在交互界面上可以通過快捷鍵操作請(qǐng)求。輸入問號(hào)’?’,可以查看快捷鍵的文檔。

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

      四大網(wǎng)絡(luò)抓包神器,總有一款適合你~

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

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

      按下i鍵后,可以對(duì)指定的請(qǐng)求進(jìn)行攔截。按mitmproxy收到指定條件的請(qǐng)求時(shí),不會(huì)立馬把它轉(zhuǎn)發(fā)出去,而是等待我們執(zhí)行resume操作后,才會(huì)把請(qǐng)求轉(zhuǎn)發(fā)出去——在這期間我們甚至可以對(duì)請(qǐng)求進(jìn)行手動(dòng)修改。

      紅色字體表示該請(qǐng)求被攔截

      之后我們可以按入a鍵來恢復(fù)該請(qǐng)求,可以輸入A鍵恢復(fù)所有被攔截的請(qǐng)求。

      把指示光標(biāo)移動(dòng)到某個(gè)請(qǐng)求上,按回車可以查看請(qǐng)求的內(nèi)容。或者鼠標(biāo)直接點(diǎn)擊請(qǐng)求也可以。

      之后通過左右方向鍵可以查看request、response、detail等信息。

      如果要編輯請(qǐng)求,可以在這個(gè)界面輸入e,然后會(huì)讓我們選擇編輯哪塊內(nèi)容:

      之后就會(huì)進(jìn)入vim編輯界面編輯相應(yīng)的內(nèi)容了(保存后會(huì)生效)。

      mitmproxy的光標(biāo)指向某個(gè)請(qǐng)求時(shí),按下r鍵可以重發(fā)這個(gè)請(qǐng)求(重發(fā)前可以對(duì)該請(qǐng)求進(jìn)行編輯)。

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

      replay.client是mitmproxy內(nèi)置的一個(gè)命令,我們也可以自行編寫命令。命令的編寫可以參考官網(wǎng)文檔,這里不做介紹。

      我們可以編寫插件,然后再啟動(dòng)的時(shí)候指定插件,mitmproxy處理請(qǐng)求的時(shí)候會(huì)執(zhí)行一個(gè)插件的鏈,這樣我們就可以對(duì)請(qǐng)求進(jìn)行編輯然后再發(fā)送出去了。

      借用官網(wǎng)的插件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()

      ]

      這個(gè)方法對(duì)每一個(gè)請(qǐng)求進(jìn)行處理,然后打印序號(hào)。通過mitmproxy -s test.py來讓插件生效。通過插件可以綁定各種連接事件。感興趣的朋友可以自行去mitmproxy官網(wǎng)看文檔,這里不多做介紹。

      通過w快捷鍵我們可以把這次抓到的請(qǐng)求包保存到文件上。

      通過mitmproxy -r file可以讀取以前抓取的請(qǐng)求信息進(jìn)行分析。

      優(yōu)缺點(diǎn)

      優(yōu)點(diǎn):

      1、命令行操作,可以在無GUI界面的服務(wù)器上使用

      缺點(diǎn):

      六、總結(jié)

      對(duì)于這幾個(gè)抓包神器,我總結(jié)了下使用場(chǎng)景:

      只抓http協(xié)議的話,推薦使用mitmproxy。mitmproxy豐富的功能不僅可以滿足我們的抓包需求,還可以提升我們的工作效率。比如測(cè)試可以抓包后一鍵重發(fā)請(qǐng)求來重現(xiàn)bug,開發(fā)調(diào)試的時(shí)候可以修改請(qǐng)求內(nèi)容等等。

      如果是在線上的沒有GUI的服務(wù)器,推薦使用tcpdump,雖然mitmproxy也可以支持命令行抓包,但是生產(chǎn)環(huán)境的服務(wù)器最好不要亂安裝第三方插件。另外,大多數(shù)服務(wù)器都有裝tcpdump。我們可以通過把請(qǐng)求的內(nèi)容輸出到文件,然后拷貝會(huì)自己的電腦用wireshark分析。

      想要抓取http以外的協(xié)議的話,直接上wireshark。功能強(qiáng)大

      對(duì)于Charles,感覺用了mitmproxy之后,就基本用不上Charles了。Charles好像也可以編輯后再發(fā)送,但是感覺不是很好用,可能我用的不是很熟吧。

      關(guān)注?民工哥技術(shù)之路?微信公眾號(hào)對(duì)話框回復(fù)關(guān)鍵字:1024?可以獲取一份最新整理的技術(shù)干貨:包括系統(tǒng)運(yùn)維、數(shù)據(jù)庫(kù)、redis、MogoDB、電子書、Java基礎(chǔ)課程、Java實(shí)戰(zhàn)項(xiàng)目、架構(gòu)師綜合教程、架構(gòu)師實(shí)戰(zhàn)項(xiàng)目、大數(shù)據(jù)、Docker容器、ELK Stack、機(jī)器學(xué)習(xí)、BAT面試精講視頻等。

      TCP/IP 網(wǎng)絡(luò)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Python爬蟲:通過爬取CSDN博客信息,學(xué)習(xí)lxml庫(kù)與XPath語法
      下一篇:對(duì)AWVS掃描規(guī)則的分析
      相關(guān)文章
      亚洲熟妇中文字幕五十中出| 日韩亚洲综合精品国产| 在线观看国产一区亚洲bd| 亚洲AV无码无限在线观看不卡| 久久精品国产亚洲AV天海翼| 亚洲中文精品久久久久久不卡| 亚洲性线免费观看视频成熟| 亚洲国产精品成人精品小说 | 亚洲免费在线视频| 亚洲国产精品无码久久久不卡| 综合亚洲伊人午夜网| 国产精品亚洲mnbav网站| 中文字幕亚洲综合久久菠萝蜜| 亚洲中文字幕无码专区| 亚洲日韩一中文字暮| 亚洲а∨天堂久久精品9966| 亚洲精品无播放器在线播放| 亚洲成a人无码亚洲成www牛牛 | 亚洲无码在线播放| 亚洲欧洲日产国码无码网站 | 亚洲一线产品二线产品| 亚洲日产乱码一二三区别| 亚洲精华国产精华精华液好用 | 亚洲韩国—中文字幕| 4444亚洲国产成人精品| 亚洲无成人网77777| 亚洲宅男精品一区在线观看| 亚洲色一区二区三区四区| 亚洲AV无码一区二区三区性色| 女bbbbxxxx另类亚洲| 色噜噜亚洲精品中文字幕 | 人人狠狠综合久久亚洲88| 亚洲成a人片77777老司机| 久久久亚洲AV波多野结衣| 亚洲午夜在线一区| 亚洲精品成a人在线观看夫| 日韩亚洲综合精品国产| 国产国拍精品亚洲AV片| 亚洲国产高清视频| 亚洲国产精品免费在线观看| 亚洲人成网站999久久久综合|