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

Python3自定義http/https請求攔截mitmproxy腳本實例

 更新時間:2020年05月11日 09:11:52   作者:天外歸云  
這篇文章主要介紹了Python3自定義http/https請求攔截mitmproxy腳本實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

腳本內(nèi)容

代碼如下:

from mitmproxy import http, ctx
from multiprocessing import Lock


class Filter:
  def __init__(self, filter_info):
    self.log_info = ""
    self.mutex = Lock()
    self.filter_info = filter_info
    self.response_file = None
    self.switch_on = False
    self.log_file = "log.txt"

  def log(self, info) -> None:
    self.log_info += f"{info}\n\n"

  def write_log(self, mode="w+") -> None:
    self.mutex.acquire()
    with open(self.log_file, mode) as f:
      f.write(self.log_info)
    self.mutex.release()

  def is_target_flow(self, flow: http.HTTPFlow) -> bool:
    for info in self.filter_info:
      if info["str_in_url"] in flow.request.url:
        self.log_file = info["log_file"]
        self.switch_on = info["switch_on"]
        if info["response_file"] != None:
          self.response_file = info["response_file"]
        return True
    else:
      return False

  def modify_response(self, flow: http.HTTPFlow) -> http.HTTPFlow:
    if self.switch_on and self.response_file:
      with open(self.response_file, "r") as f:
        flow.response.content = f.read().encode()
    return flow

  def request(self, flow: http.HTTPFlow) -> None:
    if self.is_target_flow(flow):
      self.log_info = ""
      self.log(f"——METHOD——\n{flow.request.method}")
      self.log(f"——HOST——\n{flow.request.pretty_host}")
      self.log(f"——URL——\n{flow.request.pretty_url}")
      query = [i + ":" + flow.request.query[i] + "\n" for i in flow.request.query]
      self.log(f"——QUERY STRING——\n{''.join(query)}")
      if flow.request.urlencoded_form:
        form = [i + ":" + flow.request.urlencoded_form[i] + "\n" for i in flow.request.urlencoded_form]
        self.log(f"——FORM——\n{''.join(form)}")
      self.write_log()

  def response(self, flow: http.HTTPFlow) -> None:
    if self.is_target_flow(flow):
      self.log_info = ""
      self.log(f"——RESPONSE before modified——\n{flow.response.content.decode()}")
      flow = self.modify_response(flow)
      self.log(f"——RESPONSE after modified——\n{flow.response.content.decode()}")
      self.write_log(mode="a")


filter_info = [
  {
    "str_in_url": "getSimpleNews",
    "log_file": "getSimpleNews_log.txt",
    "switch_on": True,
    "response_file": "getSimpleNews_response.txt",
  },
  {
    "str_in_url": "getQQNewsComment",
    "log_file": "getQQNewsComment_log.txt",
    "switch_on": True,
    "response_file": None,
  }
]
addons = [
  Filter(filter_info)
]

使用方法

運行mitmproxy指定使用該腳本和端口號即可:

mitmproxy -p 6666 -s xxx.py

在mitmproxy運行時:

1. 會攔截url中包含str_in_url字符串的請求

2. 會把response.content修改為當前mitm運行所在目錄下的response_file文件中的內(nèi)容

3. 打印信息在當前mitm運行所在目錄下的log_file文件中

4. 如果無需修改response設置switch_on為False即為開關關閉

5. 如果不修改response的話response_file需要寫None

補充知識:mitmproxy 監(jiān)聽指定端口

安裝

使用python3的安裝方式

https://mitmproxy.org/

監(jiān)聽指定端口

例子:Presto SQL請求的監(jiān)聽

Presto地址:http://datacenter4:18080

mitmproxy命令(端口8484)
mitmproxy \
--mode reverse:http://datacenter4:18080 \
--listen-host datacenter4 \
--listen-port 8484 \
--replacements :~s:\/\/datacenter4/:\/\/datacenter4:18080/

然后JDBC訪問Presto使用:jdbc:presto://datacenter4:8484

效果

以上這篇Python3自定義http/https請求攔截mitmproxy腳本實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

靖江市| 通化市| 怀化市| 建阳市| 肇州县| 百色市| 右玉县| 全南县| 临漳县| 长泰县| 舞钢市| 安图县| 崇仁县| 镇康县| 平陆县| 全南县| 中山市| 哈密市| 永寿县| 贵州省| 梁河县| 郴州市| 义乌市| 巴楚县| 新津县| 灵寿县| 延庆县| 南溪县| 东台市| 临泽县| 汉川市| 河东区| 德庆县| 宁国市| 扎赉特旗| 安陆市| 巴彦淖尔市| 江口县| 昆山市| 罗平县| 鲜城|