1. 程式人生 > >通過抓包,實現Python模擬登陸各網站,原理分析!

通過抓包,實現Python模擬登陸各網站,原理分析!

瀏覽器中 cda class 登陸 驗證 查詢 圖片 自動化 cap

技術分享圖片

一、教程簡介

1.1 基本介紹

通過分析登陸流程並使用 Python 實現模擬登陸到一個實驗提供的網站,在實驗過程中將學習並實踐 Python 的網絡編程,Python 實現模擬登陸的方法,使用 Firefox 抓包分析插件分析網絡數據包等知識。

模擬登錄可以幫助用戶自動化完成很多操作,在不同場合下有不同的用處,無論是自動化一些日常的繁瑣操作還是用於爬蟲都是一項很實用的技能。本課程通過 Firefox 和 Python 來實現,環境要求如下:

  • Python 庫:urllib, http.cookiejar, Django
  • Firefox 要求:裝有 live http header插件 (已提供)
技術分享圖片

1.3 材料

技術分享圖片

1.4 準備技術分享圖片

1) 安裝抓包插件Live Http Headers

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

2)啟動web應用

使用 ps -aux | grep codebox 查詢獲得 codebox 的進程號,然後使用 kill -9 進程號 停止 codebox 進程。執行過程見下圖:

技術分享圖片

首先安裝demo依賴的web框架django,並測試是否安裝成功:

技術分享圖片

啟動成功後在瀏覽器中輸入 http://localhost:8000/polls 看到登錄頁面表示啟動成功

技術分享圖片

二、分析登錄過程

要通過編程實現登錄,首先需要理解一般Web應用的登陸過程。

技術分享圖片

2.1 抓取請求

技術分享圖片

2.2原理分析

技術分享圖片

技術分享圖片

為什麽是2個請求而不是1個呢?通過分析登錄請求發現,登陸成功之後服務器發送了302重定向響應,服務器要求瀏覽器重新請求首頁,這就產生了第二個請求。再來分析第二個請求,可以看到它相比登錄請求多了一個請求頭:

技術分享圖片

整個登錄流程如下圖所示:

技術分享圖片

服務器到底是如何區別不同用戶的session的?為什麽登陸成功會後要回寫cookie呢?

技術分享圖片

2.3小結

對於服務器來說,登錄=驗證+寫session。對於瀏覽器來說,登錄=發送登錄信息+獲取帶sessionid的cookie。可以說,只要獲得了sessionid,就算實現了模擬登錄。有了它我們便可以遊離於系統之中。

三、使用Python實現登錄(簡單實例)

理解了登錄過程的原理和細節之後,開始用Python來編寫模擬登陸程序吧。

技術分享圖片

3.1導入模塊

不要忘記編寫文件頭、導入必要的依賴模塊

技術分享圖片

3.2構造登錄請求

技術分享圖片

登錄請求的實體部分如下:

技術分享圖片

技術分享圖片

全部Python代碼:

技術分享圖片

附加參數

技術分享圖片

防盜鏈

Web 應用的資源都是有url的,只要獲得了url就能夠在任何地方引用。聽起來很方便,但這可能會導致你的資源被別人盜用。

技術分享圖片

3.3發送請求並保存cookie

技術分享圖片

Python代碼如下:

技術分享圖片

如果登陸成功

技術分享圖片

就可以在指定的文件my_cookies.txt中看到sessionid了。

3.4 使用cookie訪問系統服務

技術分享圖片

技術分享圖片

技術分享圖片

在我們模擬登錄成功後,就可以直接通過opener打開這個url來使用這項系統服務。代碼實現如下:

技術分享圖片

如果有是在另外一個python文件中使用這個cookie的話,再打開url之前需要先載入cookie:

技術分享圖片

教程取自實驗樓。

通過抓包,實現Python模擬登陸各網站,原理分析!