凱爾后端項目結(jié)構(gòu)

項目地址

凱爾后端:https://github.com/Mrshenxh/Kayle

項目技術(shù)選型

項目后端技術(shù)選型為python Flask框架签舞,主要特點小而輕,原生組件幾乎為0觅捆,契合項目限制為企業(yè)內(nèi)部使用的初衷辰妙。

優(yōu)點如下:

簡單,F(xiàn)lask的路由以及路由函數(shù)由修飾器設(shè)定侥猩,開發(fā)人員不需要借助其他文件匹配架曹;

配置靈活隘冲,有多種方法配置,不同環(huán)境的配置也非常方便绑雄;環(huán)境部署簡單展辞,F(xiàn)lask運行不需要借助其他任何軟件,只需要安裝了Python的IDE万牺,在命令行運行即可罗珍。只需要在Python中導入相應包即可滿足所有需求;

入門簡單脚粟,通過官方指南便可以清楚的了解Flask的運行流程覆旱;

低耦合,F(xiàn)lask可以兼容多種數(shù)據(jù)庫核无、模板扣唱。

項目結(jié)構(gòu)


app/config:項目配置文件夾,包含以下重要內(nèi)容:

1团南、mysql相關(guān)信息(地址噪沙,端口,用戶名和密碼)

2吐根、DB(集成flask_sqlalchemy和mysql更方便的交互)

3正歼、celery配置信息(URL,BACKEND)

4、SECRET_KEY(加密使用)

5拷橘、user_socket_dict(自定義一個全局socket dict局义,存儲用戶和mitmproxy上傳socket)

app/logs:項目log文件位置,包括celery日志冗疮,gunicorn日志萄唇,后續(xù)接入logging

app/models:應用model層,包括用戶赌厅,計劃穷绵,核心接口等model

app/statics:靜態(tài)文件存儲地址

app/templates:html模版存儲地址轿塔,因為項目為前后端分離特愿,所以暫時沒用到

app/utils:公共方法存儲地仲墨,后續(xù)優(yōu)化擴展

app/views:應用view層,基于藍圖實現(xiàn)route引入

app/__init__.py:應用初始化文件揍障,初始化重要組件目养,如app,MCelery毒嫡,flask_login回調(diào)函數(shù)等

venv:python虛擬環(huán)境癌蚁,進入虛擬環(huán)境命令:source venv/bin/active

gunicorn.conf.py:gunicorn配置文件,關(guān)于gunicorn請參考項目部署

qa_tools_be.py:基于geventwebsocket的執(zhí)行啟動文件

requirement.txt:python資源文件兜畸。通過 pip install -r requirements.txt 拉取項目依賴的python第三方努释;通過 pip freeze > requirements.txt生成項目本地資源列表文件。

業(yè)務結(jié)構(gòu)

根據(jù)上面的項目結(jié)構(gòu)可以了解到咬摇,項目的主要業(yè)務模塊主要在model層以及view層伐蒂。下面針對這兩個模塊的對應業(yè)務表和接口再做具體介紹。

model層:

history_plan_model:

歷史計劃模型肛鹏,對應history_plan_list?數(shù)據(jù)庫表逸邦。可根據(jù)ID查找相關(guān)數(shù)據(jù)在扰。

temp_interface_model:

CoreInterface:核心接口模型缕减,對應core_interface_list?數(shù)據(jù)庫表∶⒅椋可根據(jù)?interface_id?查找相關(guān)數(shù)據(jù)悍缠。

TempUserPort:臨時端口模型,對應 temp_mitmproxy_list 數(shù)據(jù)庫表缰趋〔该校可根據(jù)user_id,port和mitm_id查找相關(guān)數(shù)據(jù)

user_model:

用戶模型好爬,對應user_list?數(shù)據(jù)庫表局雄。可根據(jù)user_id查找相關(guān)數(shù)據(jù)存炮。

view層:

user:

user/login:登錄

user/register: 注冊

user/message: 查詢用戶詳細信息

user/checklogin: 校驗是否處于登錄狀態(tài)

user/logout: 退出登錄

tempinter:

tempinter/queryportmsg: 根據(jù)port查詢 temp_mitmproxy_list數(shù)據(jù)庫表內(nèi)對應的數(shù)據(jù)(不校驗登錄狀態(tài))

tempinter/queryusersocket: 查詢當前用戶是否有已經(jīng)使用的mitmproxy代理

tempinter/uploadcoreinter: 核心接口上傳

tempinter/createmitm: 創(chuàng)建mitmproxy代理

tempinter/stopmitm: 關(guān)閉mitmproxy代理

tempinter/tempsocket/flow/<usermessage>: websocket數(shù)據(jù)流傳輸

tempinter/getcoreinter: 分頁下發(fā)核心接口

tempinter/searchcore:?根據(jù)interface_id查詢接口詳細信息

tempinter/deletecore: 根據(jù)interface_id刪除核心接口

tempinter/editcore: 二次編輯核心接口

plan:

plan/createplan: 計劃創(chuàng)建

plan/stopplan: 關(guān)閉計劃

plan/queryplan: 計劃創(chuàng)建成功后炬搭,查詢計劃

plan/queryplancore: 計劃創(chuàng)建成功后,查詢計劃模塊對應的核心接口

plan/historyplan: 歷史計劃列表

plan/deletehistoryplan: 刪除某個歷史計劃

plan/historyplan/<id>: 查看某個歷史計劃的詳細數(shù)據(jù)

operator:

operator/scanplan: 觸發(fā)掃描計劃是否結(jié)束場景

operator/scanmitm: 觸發(fā)掃描mitmproxy代理

其他

項目環(huán)境基于python3穆桂;

創(chuàng)建計劃宫盔,會將task推送到celery任務隊列中∠硗辏可以通過plan/queryplan 查看task執(zhí)行情況灼芭,也可以在redis上根據(jù)鍵值對查詢;

進行中計劃的數(shù)據(jù)般又,存儲在redis中彼绷。對應hash為“plan_core”巍佑,具體邏輯可參考app/utils/redis_operat.py 文件;

關(guān)于mitmproxy

mitmproxy是一款類似于Charles的代理工具寄悯,官網(wǎng)參考:https://www.mitmproxy.org/萤衰。

啟動mitmproxy,用mitmproxy猜旬、mitmdump脆栋、mitmweb都可以,區(qū)別如下:

mitmproxy?命令啟動后洒擦,會提供一個命令行界面椿争,用戶可以實時看到發(fā)生的請求,并通過命令過濾請求熟嫩,查看請求數(shù)據(jù)丘薛;

mitmweb?命令啟動后,會提供一個 web 界面邦危,用戶可以實時看到發(fā)生的請求洋侨,并通過 GUI 交互來過濾請求,查看請求數(shù)據(jù)倦蚪;

mitmdump?命令啟動后希坚,沒有界面,程序默默運行陵且,所以 mitmdump 無法提供過濾請求裁僧、查看數(shù)據(jù)的功能,只能結(jié)合自定義腳本慕购,默默工作聊疲;

這里我們操作mitmdump進行代理創(chuàng)建,執(zhí)行命令為:mitmdump -s kayle_be/app/utils/get_mitm_request.py?-p {端口號}

服務器mitmproxy證書安裝:

在服務器上沪悲,我們也要安裝mitmproxy對應證書:

cd ~/.mitmproxy

# 證書格式轉(zhuǎn)換

openssl x509 -in mitmproxy-ca-cert.pem -inform PEM -out mitmproxy-ca-cert.crt

sudo mkdir /usr/share/ca-certificates/extrasudo cpmitmproxy-ca-cert.crt/usr/share/ca-certificates/extra/mitmproxy-ca-cert.crt

# 無交互模式

sudo update-ca-certificates

腳本執(zhí)行原理:

在執(zhí)行命令中获洲,我們指定了端口和腳本,那么每次有接口數(shù)據(jù)流轉(zhuǎn)過來時殿如,都會執(zhí)行一遍get_mitm_request.py腳本贡珊,在腳本中,我們收集了接口請求和返回的數(shù)據(jù)涉馁,并把這些數(shù)據(jù)打給websocket接口门岔,由websocket接口傳遞給current_user前端


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烤送,隨后出現(xiàn)的幾起案子寒随,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻往,死亡現(xiàn)場離奇詭異逢防,居然都是意外死亡,警方通過查閱死者的電腦和手機蒲讯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灰署,“玉大人判帮,你說我怎么就攤上這事「然” “怎么了晦墙?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肴茄。 經(jīng)常有香客問我晌畅,道長,這世上最難降的妖魔是什么寡痰? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任抗楔,我火速辦了婚禮,結(jié)果婚禮上拦坠,老公的妹妹穿的比我還像新娘连躏。我一直安慰自己,他們只是感情好贞滨,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布入热。 她就那樣靜靜地躺著,像睡著了一般晓铆。 火紅的嫁衣襯著肌膚如雪勺良。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天骄噪,我揣著相機與錄音尚困,去河邊找鬼。 笑死链蕊,一個胖子當著我的面吹牛尾组,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播示弓,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼讳侨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奏属?” 一聲冷哼從身側(cè)響起跨跨,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勇婴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忱嘹,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年耕渴,在試婚紗的時候發(fā)現(xiàn)自己被綠了拘悦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡橱脸,死狀恐怖础米,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情添诉,我是刑警寧澤屁桑,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站栏赴,受9級特大地震影響蘑斧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜须眷,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一竖瘾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧花颗,春花似錦准浴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至今野,卻和暖如春葡公,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背条霜。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工催什, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宰睡。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓蒲凶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拆内。 傳聞我的和親對象是個殘疾皇子旋圆,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容