monkeysocks開發日志--TCP協議分析及架構規劃

jopen 11年前發布 | 14K 次閱讀 monkeysocks

monkeysocks的目標是為開發以及測試提供一個穩定的環境。它使用socks代理,將錄制網絡流量并本地保存,并在測試時將其重放。

jsocks的改造

首先對公司一個項目進行了代理,測試結果:從開始啟動到完成,只有4.7M的網絡流量,本地空間開銷不是問題。

今天把jsocks修改了下,將build工具換成了maven,并獨立成了項目https://github.com/code4craft/jsocks。后來算是把record和replay功能做完了,開始研究各種協議replay的可能性。

replay時候,如何知道哪個請求對應響應包是個大問題。開始的方式是把request報文的md5作為key,response作為value。

TCP協議分析

后來使用wiredshark結合程序日志來進行分析。

TCP協議棧大概是這樣子: image

下面是wiredshark抓包的截圖,從ea開始才是應用層協議的內容。

image

應用層協議分析

實現replay后,拿HTTP協議做了測試,自己用程序寫了個URLConnection,倒是能夠實現replay,但是換到瀏覽器里就很難 了,因為cookie總是會有些不一樣(現在基本上所有站點都會寫cookie吧)。如果不對應用層協議本身進行分析,那么進行包的偽造就很難了。

https協議對于重放攻擊做了處理,每次的請求包都不一樣,也無法replay成功,暫時略過。

后來對于測試中得重點協議--mysql的協議,進行了研究。

這是一個有狀態的協議,狀態轉移圖如下:

image

詳細介紹http://dev.mysql.com/doc/internals/en/client-server-protocol.html,有點hold不住的感覺啊!

看了Authentication部分,會由server端發送一個隨機數,來避免重放攻擊。這個東西啟發了我,因為主動權一般都是在server端,而我們要對client進行欺騙,難度就小了很多。

架構設計

后來決定把架構解耦了,fake server單獨作為一個模塊,可以單獨啟動成TCP server,也可以加入到jsocks里。最后架構是這樣子:

image

fake servers的實現必定是個大坑,不過能把常用協議都了解一遍,本身也很有意思不是么?

開發計劃:

  • 實現fake servers的TCP框架。

  • 研究并實現常用協議的fake server。

  • 確定持久化以及報文對應的策略。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!