最近要寫一款基于被動式的漏洞掃描器,因為被動式是將我們在瀏覽器瀏覽的時候所發(fā)出的請求進行捕獲,然后交給掃描器進行處理,本來打算自己寫這個代理的,但是因為考慮到需要抓取https,所以最后找到Mitmproxy這個程序。

安裝方法:
pip install mitmproxy
接下來通過一個案例程序來了解它的使用,下面是目錄結構
sproxy
|utils
|__init__.py
|parser.py
|sproxy.py
sproxy.py代碼
#coding=utf-8
from pprint import pprint
from mitmproxy import flow, proxy, controller, options
from mitmproxy.proxy.server import ProxyServer
from utils.parser import ResponseParser
# http static resource file extension
static_ext = ['js', 'css', 'ico', 'jpg', 'png', 'gif', 'jpeg', 'bmp']
# media resource files type
media_types = ['image', 'video', 'audio']
# url filter
url_filter = ['baidu','360','qq.com']
static_files = [
'text/css',
'image/jpeg',
'image/gif',
'image/png',
]
class WYProxy(flow.FlowMaster):
def __init__(self, opts, server, state):
super(WYProxy, self).__init__(opts, server, state)
def run(self):
try:
pprint("proxy started successfully...")
flow.FlowMaster.run(self)
except KeyboardInterrupt:
pprint("Ctrl C - stopping proxy")
self.shutdown()
def get_extension(self, flow):
if not flow.request.path_components:
return ''
else:
end_path = flow.request.path_components[-1:][0]
split_ext = end_path.split('.')
if not split_ext or len(split_ext) == 1:
return ''
else:
return split_ext[-1:][0][:32]
def capture_pass(self, flow):
# filter url
url = flow.request.url
for i in url_filter:
if i in url:
return True
"""if content_type is media_types or static_files, then pass captrue"""
extension = self.get_extension(flow)
if extension in static_ext:
return True
# can't catch the content_type
content_type = flow.response.headers.get('Content-Type', '').split(';')[:1][0]
if not content_type:
return False
if content_type in static_files:
return True
http_mime_type = content_type.split('/')[:1]
if http_mime_type:
return True if http_mime_type[0] in media_types else False
else:
return False
@controller.handler
def request(self, f):
pass
@controller.handler
def response(self, f):
try:
if not self.capture_pass(f):
parser = ResponseParser(f)
result = parser.parser_data()
if f.request.method == "GET":
print result['url']
elif f.request.method == "POST":
print result['request_content'] # POST提交的參數(shù)
except Exception as e:
raise e
@controller.handler
def error(self, f):
pass
# print("error", f)
@controller.handler
def log(self, l):
pass
# print("log", l.msg)
def start_server(proxy_port, proxy_mode):
port = int(proxy_port) if proxy_port else 8090
mode = proxy_mode if proxy_mode else 'regular'
if proxy_mode == 'http':
mode = 'regular'
opts = options.Options(
listen_port=port,
mode=mode,
cadir="~/.mitmproxy/",
)
config = proxy.ProxyConfig(opts)
state = flow.State()
server = ProxyServer(config)
m = WYProxy(opts, server, state)
m.run()
if __name__ == '__main__':
start_server("8090", "http")
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享文章:python使用mitmproxy抓取瀏覽器請求的方法-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://chinadenli.net/article16/hjhdg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、搜索引擎優(yōu)化、營銷型網(wǎng)站建設、網(wǎng)站排名、電子商務、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容