Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
Fiddler官網:
https://www.telerik.com/fiddler
Fiddler Forum:
https://www.telerik.com/forums/fiddler?searchText=winconfig
Fiddler 插件下載:
https://www.telerik.com/fiddler/add-ons
Firebug:是 Mozilla Firefox 網頁瀏覽器擴展,也是一個網頁開發工具。
httpWatch:是強大的網頁數據分析工具,集成在Internet Explorer工具欄。包括網頁摘要Cookies管理,緩存管理,消息頭發送/接受,字符查詢,POST 數據和目錄管理功能,報告輸出,HttpWatch 是一款能夠收集并顯示深層信息的軟件。
charles:界面相較與fiddler要簡潔,主要用于Mac平臺。
Wireshark:網絡包分析工具,也是通用抓包工具,抓取信息量龐大且詳細;是需要過濾信息才能得到有用信息,基本所有的通信抓包都可以抓取。
Fiddler :使用比較簡單,很好用的Web調試工具之一,記錄所有客戶端和服務器的http和https請求,允許監視,設置斷點,甚至修改輸入輸出數據等。
Fiddler是C#語言開發;http協議調試代理工具,能夠記錄電腦與互聯網之間http通訊,同時可設置斷點,查看所有通訊的Fiddler數據(指cookie,html,js,css等文件)。
Fiddler是以代理web服務器的形式工作的,在客戶端和服務器之間建立一個代理服務器,監聽客戶端發出的請求和服務器返回的響應結果,默認端口8888。
客戶端將請求數據發送出去后,會先經過代理服務,代理服務可以對請求處理再發送給服務器;
服務器的響應數據返回給客戶端,也會先通過代理服務,也可做相應的修改,返回給客戶端。
工作于七層中的應用層,也可以捕獲通過的HTTP(S)請求。
解析過程如下:
客戶端請求建立HTTPS連接,發送客戶端支持的加密協議和版本列表等信息給服務器;
Fiddler接受客戶端的請求并偽裝成客戶端發送相同的請求給Web服務器;
Web服務器收到Fiddler的請求后,從請求中篩選出合適的加密協議并返回服務器CA證書,證書中包含公鑰信息;
Fiddler收到服務器響應之后,保存服務器證書并自簽名一個證書,偽裝成服務器將該證書下發給客戶端;
客戶端驗證證書的合法性(Fiddler能否抓取到HTTPS報文關鍵就看這一步了);
客戶端生產對稱密鑰并使用自簽名證書的公鑰進行加密,發送給服務器;
Fiddler攔截客戶端的請求之后,使用私鑰解密該報文,獲取對稱密鑰并使用CA證書的公鑰加密,再發送給Web服務器;
Web服務器接收到客戶端加密后的對稱密鑰,采用私鑰解密,并使用對稱密鑰解密測試數據傳給客戶端;
Fiddler使用前面獲取的對稱密鑰解密報文;
客戶端驗證數據無誤后,HTTPS連接建立完成,此時客戶端開始向服務器發送使用對稱密鑰加密的業務數據;
Fiddler使用前面獲取的對稱密鑰解密客戶端發送的數據并重新加密轉發給客戶端。
官網下載后,直接打開安裝即可。
相關鏈接:https://cloud.tencent.com/developer/article/1342186
第一步:先安裝Mono安裝
首先,Mac下需要使用.Net編譯后的程序,需要用到跨平臺的方案Mono(現階段微軟已推出跨平臺的方案.Net Core,不過暫時只支持控制臺程序)。安裝程序可以從http://www.mono-project.com/download/#download-mac地址下載。
安裝完后,在Terminal里執行以下命令:
/Library/Frameworks/Mono.framework/Versions/<Mono Version>/bin/mozroots --import --sync
此步是為了從Mozilla LXR上下載所有受信任的root證書,存于Mono的證書庫里。
root證書能用于請求https地址。
接下來如果想要運行Fiddler,還需要把Mono加入到環境變量中。
編輯.bash_profile文件:
sudo vi ~/.bash_profile
加入文本:
export MONO_HOME=/Library/Frameworks/Mono.framework/Versions/5.0.1
export PATH=$PATH:$MONO_HOME/bin
保存后重新打開Terminal,Mono環境已裝好。
第二步:Fiddler的安裝
從Fiddler官網https://www.telerik.com/download/fiddler下載fiddler-mac.zip的壓縮包。
解壓到非中文字符的路徑下。
Fiddler運行
打開Terminal,進入到剛才解壓的Fiddler路徑,執行命令運行:
sudo mono Fiddler.exe
總結:沒有設置允許跨域訪問,但是依然請求到了數據。
這說明跨域訪問的限制并不是瀏覽器限制發送請求,而是瀏覽器阻止了請求后數據的加載渲染。
1)、請求允許跨域的訪問的url
響應頭帶有"Access-Control-Allow-Origin","*",告知瀏覽器可以跨域訪問。
瀏覽器收到response信息,并且檢查到響應頭中有"Access-Control-Allow-Origin", “*”,因此將數據展示出來。
2)、請求不允許跨域的訪問的url
響應頭不帶有"Access-Control-Allow-Origin","*",沒有表示能夠跨域訪問的請求頭信息,所以瀏覽器不可以跨域訪問。
頁面收到了信息,但是沒有檢查到響應頭中有允許跨域訪問的設置,因此沒有對數據進行加載渲染。并且報出下面的異常:No 'Access-Control-Allow-Origin' header ispresent on the requested resource。
前端跨域
跨域的來源是同源策略,為什么要有同源策略也是為了安全著想,防止遭受一些網絡攻擊,比如:csrf(跨站請求偽造)等。
一句話總結:跨域的攔截不是瀏覽器在請求前拒絕訪問不同源URL而是在請求非同源URL后拒絕加載數據!??!
瀏覽器發送跨域請求
接收response數據
看看響應頭是否帶有"Access-Control-Allow-Origin","*"這類允許跨域的字樣
檢查響應頭
如果響應頭中沒有允許跨域訪問的配置,則請求到的數據不進行加載,并報出響應異常
如果響應頭中有允許跨域訪問的設置,正常加載數據
iddler簡介
Fiddler是一個http協議調試代理工具,它能夠記錄并檢查所有你的電腦和互聯網之間的http通訊,設置斷點,查看所有的“進出”Fiddler的數據(指cookie,html,js,css等文件)。 Fiddler 要比其他的網絡調試器要更加簡單,因為它不僅僅暴露http通訊還提供了一個用戶友好的格式.
Fiddler使用c#語言開發,是一個開源軟件。它包含一個簡單卻功能強大的基于JScript .NET 事件腳本子系統,它的靈活性非常棒,可以支持眾多的http調試任務,并且能夠使用c#語言進行擴展。他還提供一系列接口以支持插件開發。
Fiddler是基于代理模式工作的,簡單來說,當你打開Fiddler軟件,他會開始監聽本機8888端口。然后將系統默認代理設置為127.0.0.1:8888。這樣本機所有使用系統代理的軟件包括瀏覽器會先把數據發送到Fiddler,然后Fiddler再將數據發送到服務器。服務器返回的數據先發送給Fiddler,再由Fiddler發送到指定的程序。在這個過程中Fiddler起到了轉發數據(代理)的作用。由于數據無論是請求還是響應都通過Fiddler進行轉發,所以Fiddler有權限對數據進行獲取、存儲、修改等操作。
Fiddler安裝
打開https://www.telerik.com/fiddler,點擊Free download進行下載。
安裝過程很簡單綠色,選擇好安裝路徑,點擊Install就可以了。這里特別注意下,你要記住你的安裝路徑,因為Fiddler默認不會創建桌面快捷方式,需要你去安裝目錄打開程序或者手動創建快捷方式。
Fiddler安裝
界面簡介
Fiddler界面
使用及設置
Fiddler功能繁雜,不好以圖文的形式把每一項講清楚。下面我講一些日常使用的、關鍵的按鈕、功能和設置。
安裝完成后我們一般先進行幾項很重要的設置,首先點擊Tools->options->Connections
Fiddler
在這里我們可以修改Fiddler監聽的端口,勾選紅圈標示出來的這項,允許遠程計算機連接。以便在以后我們抓取手機等移動設備的數據包。勾選之后在手機Wifi設置里設置代理為 “內網IP:8888"(如 192.168.1.2:8888)就可以抓取手機的HTTP數據包。
然后再將標簽頁切換到HTTPS,以設置Fiddler可以抓取https數據包
Fiddler設置
勾選以上幾項,期間會彈出證書安裝,一路確認下去。完成之后,你的Fiddler就可以抓取本機的https數據包
Fiddler工具欄
工具欄中我們主要介紹紅圈選中的幾個功能。X是用來清空當前數據記錄的。
Decode選中之后會自動嘗試解壓響應的內容,包括但不限于以下格式(gzip、deflate、bzip2、brotli)。
"Keep 1000 sessions"表示顯示多少條數據記錄,默認顯示全部,這里建議設置為500或者1000,默認全部的話,時間久了會把你電腦內存耗光.
Any Process 這個按鈕可以拖動選擇抓指定應用程序的包,比如拖動到firefox就只顯示firefox的數據包。默認顯示全部應用程序。
Save按鈕可以把當前的數據記錄保存到硬盤,以便在方便的時候重新打開分析
Clear Cache是清除瀏覽器緩存,基本不用
TextWizard是個功能非常強大的編碼解碼工具,支持多種格式。會經常用到
TextWizard
鼠標放到Online按鈕上,會顯示你當前的網卡信息、內網IP。方便給手機設置代理的時候查看。
當在左側選擇一條數據記錄時,右側會顯示該請求的具體信息
請求數據
Headers會顯示請求頭的一些信息,例如是GET還是POST、瀏覽器UA、cookie等
Textview和SyntaxView功能基本一樣,用來顯示post數據的原始明文格式(UTF-8),如果是二進制數據則顯示亂碼
WebForms會更清晰的展示你的post內容(僅限于&連接格式的post內容,如果是json格式,這里不顯示)
HexView,以16進制顯示你的整個請求包
Auth,顯示授權信息
Cookie,用來顯示請求攜帶的cookie信息
raw,以明文(utf-8)顯示整個請求頭信息包含post內容
json,以json格式顯示post內容
xml,以xml格式顯示post內容
以下是服務器響應的響應信息截圖
Headers顯示響應頭信息
TextView和SyntaxView作用相似,用來顯示服務器返回的具體內容。當返回內容非常大的時候TextView會卡死很久才顯示。SyntaxView比TextView響應快很多
ImageView,如果服務器返回的是圖片流的話,會在這個標簽顯示圖片
HexView,以16進制顯示返回內容
WebView,如果返回的是html代碼,這個標簽會解析html并顯示網頁
Auth,顯示返回的授權信息
Caching,顯示緩沖
Cookie,顯示服務器返回的cookie
Raw,以明文(utf-8)顯示完整的響應數據包
Json,以json格式顯示返回內容
XML,以xml格式顯示返回內容
Composer工具介紹
Composer工具在Fiddler中使用率非常高,常常用來模擬一些數據的提交
上圖我們使用Composer工具,模擬提交了百度翻譯的數據包。我們提交一個請求,詢問服務器China的意思是什么?
服務器給我們返回以上詞義。返回格式為json格式。
Fiddler命令行
在命令行中我們基本只需要掌握bpu命令就可以了,這是一個數據劫持命令
我們在命令行中輸入bpu http://fanyi.baidu.com/sug 然后回車,Fiddler會監聽并劫持發往和返回http://fanyi.baidu.com/sug的所有數據,并支持中途編輯修改。
我們把我們提交的china關鍵詞改成japan,發現服務器給我們返回了japan的翻譯
通過這個命令,我們既可以修改請求,也可以修改響應。常常用來劫持數據,例如你玩的某個游戲里,你有100個金幣,通過劫持數據,你可以吧自己的金幣數量修改成1萬甚至更多。
抓包實戰
我們通過一個示例,來強化上面的學習。我們來使用Fiddler抓取百度翻譯輸入china的數據包,然后使用我們熟悉的編程語言來寫一個翻譯軟件。
首先我們打開百度翻譯(http://fanyi.baidu.com/#en/zh/),輸入china,觀察Fiddler中抓到的數據。
通過逐條查看,或者搜索china字樣,我們找到了一個異步請求數據包,這個包是用來做詞義聯想的,雖然不是最終的翻譯數據包,但是該包相對簡單也可以實現翻譯功能,我們就來模擬這個包實現翻譯功能。
我們按住這條記錄,拖動到Composer工具里,簡單調試去除一下無用的頭部信息,看瀏覽器是否能正常返回。我們精簡后的請求為下圖示例
下面我們使用python編程模擬這個請求
import http
import json
from urllib import parse
keyword=input('請輸入要翻譯的單詞:')
#構造請求頭信息
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36\
(KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.3964.2 Safari/537.36'
,'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
conn=http.client.HTTPConnection("fanyi.baidu.com") #創建HTTP連接
body={'kw': keyword} #構造post信息
body=parse.urlencode(body) #對post內容進行url編碼
conn.request("POST","/sug",body=body,headers=headers) #開始請求
response=conn.getresponse() #獲取響應
if(response.status==200): #判斷服務器響應代碼為200的話即返回正常
result=response.read().decode('utf-8'); #獲取響應數據
result=json.loads(result) #解析json
print('翻譯內容為:',result['data'][0]['v']) #輸出翻譯內容
else:
print('出現錯誤') #如果服務器響應代碼不是200,是500或者404或者其他錯誤代碼,都顯示為錯誤
下篇文章會詳細講解如何使用Fiddler抓取手機包,如何設置代理,安裝證書等。
喜歡的請關注我,轉載請注明出處
多時候,我們使用抓包工具抓取和分析的為HTTP協議,所以,必須要了解HTTP協議。否則抓包工具無從學起。
HTTP協議
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。
1、支持客戶/服務器模式。 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、POST。每種方法規定了客戶與服務器聯系的類型不同。由于HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
2.靈活: HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
3.無連接: 無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
4.無狀態: HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
請求類型:
請求行以一個方法符號開頭,以空格分開,后面跟著請求的URI和協議的版本,格式如下:Method Request-URI HTTP-Version CRLF, 其中 Method表示請求方法;Request-URI是一個統一資源標識符;HTTP-Version表示請求的HTTP協議版本;CRLF表示回車和換行(除了作為結尾的CRLF外,不允許出現單獨的CR或LF字符)。
請求方法(所有方法全為大寫)有多種,各個方法的解釋如下:
請求方法 | 說明 |
---|---|
GET | 請求獲取Request-URI所標識的資源 |
POST | 在Request-URI所標識的資源后附加新的數據 |
HEAD | 請求獲取由Request-URI所標識的資源的響應消息報頭 |
PUT | 請求服務器存儲一個資源,并用Request-URI作為其標識 |
DELETE | 請求服務器刪除Request-URI所標識的資源 |
TRACE | 請求服務器回送收到的請求信息,主要用于測試或診斷 |
CONNECT | 保留將來使用 |
OPTIONS | 請求查詢服務器的性能,或者查詢與資源相關的選項和需求 |
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息–表示請求已接收,繼續處理
2xx:成功–表示請求已被成功接收、理解、接受
3xx:重定向–要完成請求必須進行更進一步的操作
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現
5xx:服務器端錯誤–服務器未能實現合法的請求
常見狀態代碼、狀態說明: 200 OK //客戶端請求成功 400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解 401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用 403 Forbidden //服務器收到請求,但是拒絕提供服務 404 Not Found //請求資源不存在,eg:輸入了錯誤的URL 500 Internal Server Error //服務器發生不可預期的錯誤 503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
請求頭信息與響應頭信息:
請求頭信息
請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。
常用的請求報頭:
Accept:請求報頭域用于指定客戶端接受哪些類型的信息。eg:Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept:text/html,表明客戶端希望接受html文本。
Accept-Encoding:請求報頭域類似于Accept,但是它是用于指定可接受的內容編碼。
Accept-Language:請求報頭域類似于Accept,但是它是用于指定一種自然語言。
Connection:允許發送指定連接的選項。例如指定連接是連續,或者指定“close”選項,通知服務器,在響應完成后,關閉連接。從HTTP/1.1起,默認都開啟了Keep-Alive,保持連接特性。
Host(發送請求時,該報頭域是必需的),Host請求報頭域主要用于指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的。
User-Agent:請求報頭域允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器。不過,這個報頭域不是必需的,如果我們自己編寫一個瀏覽器,不使用User-Agent請求報頭域,那么服務器端就無法得知我們的信息了。
響應頭信息
響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息,以及關于服務器的信息和對Request-URI所標識的資源進行下一步訪問的信息。
常用的響應報頭:
Location:響應報頭域用于重定向接受者到一個新的位置。Location響應報頭域常用在更換域名的時候。
Server:響應報頭域包含了服務器用來處理請求的軟件信息。與User-Agent請求報頭域是相對應的。
WWW-Authenticate:響應報頭域必須被包含在401(未授權的)響應消息中,客戶端收到401響應消息時候,并發送Authorization報頭域請求服務器對其進行驗證時,服務端響應報頭就包含該報頭域。
X-Frame-Options: 有三個值:DENY 表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中嵌套也不允許。SAMEORIGIN表示該頁面可以在相同域名頁面的 frame 中展示。ALLOW-FROM uri 表示該頁面可以在指定來源的frame中展示。
Fildder是一款免費的web調試代理工具,支持任何瀏覽器、系統或平臺。
官方網站:https://www.telerik.com/fiddler
Fiddler是以代理Web服務器的形式工作的,瀏覽器與服務器之間通過建立TCP連接以HTTP協議進行通信,瀏覽器默認通過自己發送HTTP請求到服務器,它使用代理地址:127.0.0.1
端口:8888
開啟Fiddler后,通過瀏覽器訪問:http://127.0.0.1:8888
點擊這里下載Fiddler。不過,更簡單的方式是直接在百度中搜索,通過百度軟件中心下載。
安裝過程這里省略。啟動Fiddler,主界面如下:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。