最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用mitmproxy抓取瀏覽器請求的方法

 更新時間:2019年07月02日 21:39:19   作者:太上-道  
今天小編就為大家分享一篇python使用mitmproxy抓取瀏覽器請求的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

安裝方法:

pip install mitmproxy

接下來通過一個案例程序來了解它的使用,下面是目錄結(jié)構(gòu)

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")

parser.py

# from __future__ import absolute_import
 
class ResponseParser(object):
 """docstring for ResponseParser"""
 
 def __init__(self, f):
  super(ResponseParser, self).__init__()
  self.flow = f
 
 def parser_data(self):
  result = dict()
  result['url'] = self.flow.request.url
  result['path'] = '/{}'.format('/'.join(self.flow.request.path_components))
  result['host'] = self.flow.request.host
  result['port'] = self.flow.request.port
  result['scheme'] = self.flow.request.scheme
  result['method'] = self.flow.request.method
  result['status_code'] = self.flow.response.status_code
  result['content_length'] = int(self.flow.response.headers.get('Content-Length', 0))
  result['request_header'] = self.parser_header(self.flow.request.headers)
  result['request_content'] = self.flow.request.content
  return result
 
 @staticmethod
 def parser_multipart(content):
  if isinstance(content, str):
   res = re.findall(r'name=\"(\w+)\"\r\n\r\n(\w+)', content)
   if res:
    return "&".join([k + '=' + v for k, v in res])
   else:
    return ""
  else:
   return ""
 
 @staticmethod
 def parser_header(header):
  headers = {}
  for key, value in header.items():
   headers[key] = value
  return headers
 
 @staticmethod
 def decode_response_text(content):
  for _ in ['UTF-8', 'GB2312', 'GBK', 'iso-8859-1', 'big5']:
   try:
    return content.decode(_)
   except:
    continue
  return content

參考鏈接:

https://github.com/ring04h/wyproxy

以上這篇python使用mitmproxy抓取瀏覽器請求的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python排序算法快速排序VS歸并排序深入對比分析

    Python排序算法快速排序VS歸并排序深入對比分析

    快速排序和歸并排序是兩種常見的排序算法,在Python中有著重要的應(yīng)用,本文將深入探討這兩種算法的原理和實現(xiàn),并提供豐富的示例代碼來說明它們的工作方式
    2024-01-01
  • pandas apply 函數(shù) 實現(xiàn)多進程的示例講解

    pandas apply 函數(shù) 實現(xiàn)多進程的示例講解

    下面小編就為大家分享一篇pandas apply 函數(shù) 實現(xiàn)多進程的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python3.4 splinter(模擬填寫表單)使用方法

    Python3.4 splinter(模擬填寫表單)使用方法

    今天小編就為大家分享一篇Python3.4 splinter(模擬填寫表單)使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python?eval()?函數(shù)看這一篇就夠了

    Python?eval()?函數(shù)看這一篇就夠了

    eval(str)函數(shù)很強大,官方解釋為將字符串str當(dāng)成有效的表達式來求值并返回計算結(jié)果,下面這篇文章主要給大家介紹了關(guān)于Python?eval()?函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Python實現(xiàn)8個概率分布公式的方法詳解

    Python實現(xiàn)8個概率分布公式的方法詳解

    在本文中,我們將介紹一些常見的分布(均勻分布、高斯分布、對數(shù)正態(tài)分布等)并通過Python代碼進行可視化以直觀地顯示它們,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Sublime如何配置Python3運行環(huán)境

    Sublime如何配置Python3運行環(huán)境

    這篇文章主要介紹了Sublime如何配置Python3運行環(huán)境問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Django中Migrate和Makemigrations實操詳解

    Django中Migrate和Makemigrations實操詳解

    這篇文章主要為大家介紹了Django中Migrate和Makemigrations實操詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • keras獲得某一層或者某層權(quán)重的輸出實例

    keras獲得某一層或者某層權(quán)重的輸出實例

    今天小編就為大家分享一篇keras獲得某一層或者某層權(quán)重的輸出實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python3 中文文件讀寫方法

    Python3 中文文件讀寫方法

    下面小編就為大家分享一篇Python3 中文文件讀寫方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • python實現(xiàn)代碼審查自動回復(fù)消息

    python實現(xiàn)代碼審查自動回復(fù)消息

    這篇文章主要介紹了python實現(xiàn)代碼審查回復(fù)消息生成的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2021-02-02

最新評論

克山县| 普兰县| 陈巴尔虎旗| 外汇| 永定县| 博白县| 临漳县| 大邑县| 翼城县| 巨鹿县| 普兰店市| 安乡县| 会昌县| 信丰县| 五寨县| 涟源市| 泾源县| 定西市| 林芝县| 淮南市| 广水市| 潞城市| 九江县| 南召县| 溆浦县| 罗山县| 藁城市| 饶阳县| 博乐市| 大城县| 苗栗县| 沙田区| 肃宁县| 白城市| 互助| 怀安县| 敦煌市| 开封市| 三穗县| 南川市| 河南省|