示例#1
0
def test_mitmdump(event_loop, tdata):
    asyncio.set_event_loop(event_loop)
    main.mitmdump([
        "-s",
        tdata.path(shutdown_script),
        "-q",
        "-p",
        "0",
    ])
示例#2
0
def test_order(event_loop, tdata, capsys):
    """Integration test: Make sure that the runtime hooks are triggered on startup in the correct order."""
    asyncio.set_event_loop(event_loop)
    main.mitmdump([
        "-n",
        "-s", tdata.path("mitmproxy/data/addonscripts/recorder/recorder.py"),
        "-s", tdata.path("mitmproxy/data/addonscripts/shutdown.py"),
    ])
    assert re.match(
        r"Loading script.+recorder.py\n"
        r"\('recorder', 'load', .+\n"
        r"\('recorder', 'configure', .+\n"
        r"Loading script.+shutdown.py\n"
        r"\('recorder', 'running', .+\n$",
        capsys.readouterr().out,
    )
示例#3
0
def run_mitmdump(environment, queue_env):
    """
    -q参数屏蔽mitmdump自身日志打印,-s 处理脚本
    """
    if queue_env == 'meta':
        sys.argv = [
            '', '-p', '8888', '-q', '-s',
            'cus_mitmdump/meta_mitmdump_script.py', environment
            # '-s', '/home/app/spider_man_app/cus_mitmdump/meta_mitmdump_script.py', environment
        ]
        mitmdump()
    if queue_env == 'search':
        sys.argv = [
            '', '-p', '8081', '-q', '-s',
            'cus_mitmdump/search_mitmdump_script.py', environment
        ]
        mitmdump()
示例#4
0
            #         continue
            #     else:
            #         base_data[k] = self.recursion(v, int_data)
            for k, v in base_data.items():
                if k in ('data', 'rows', 'devNums'):
                    base_data[k] = self.recursion(v, int_data)
                else:
                    continue
        elif isinstance(base_data, list):
            # 递归算法,如果是list 就继续遍历列表中的元素
            for i in base_data:
                self.recursion(i, int_data)
            # [self.recursion(i, int_data) for i in base_data]
        elif isinstance(base_data, int):
            # 对int型做倍增
            base_data = base_data * int_data
        else:
            base_data = base_data
        return base_data


addons = [Events()]

if __name__ == '__main__':
    from mitmproxy.tools.main import mitmdump
    # 使用debug模式启动mitmdump
    # mitmdump(['-p', '8080', '-s', __file__])
    # mitmdump -p 8080 -s C:\Users\admin\PycharmProjects\pythondemo\test_mock\recursion.py
    # 端口需要使用字符串
    mitmdump(['-p', '8888', "-s", __file__])
示例#5
0
async def test_mitmdump():
    main.mitmdump(["-q", "-p", "0"])
    await ctx.master._shutdown()
示例#6
0
            percent_data_list = [0, 0.01, -0.01]
            for i in range(len(data_dict["data"]["items"])):
                print("REWRITE中")
                person_ind = i % len(percent_data_list)
                data_dict["data"]["items"][i]["quote"][
                    "percent"] = percent_data_list[person_ind]

            flow.response.text = json.dumps(data_dict)


def recursion(data, times=1):
    """递归方式把所有浮点数倍增"""
    if isinstance(data, dict):
        for k, v in data.items():
            data[k] = recursion(v, times)
    elif isinstance(data, list):
        data = [recursion(i, times) for i in data]
    elif isinstance(data, float):
        return data * times
    else:
        # 非浮点数不做任何处理
        return data
    return data


addons = [HTTPEvents()]

if __name__ == '__main__':
    from mitmproxy.tools.main import mitmdump
    mitmdump(['-p', '9999', '-s', __file__])
示例#7
0
def main(args=None):
    if args is None:
        args = sys.argv[1:]

    parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
    parser.add_argument("-v",
                        "--version",
                        action="version",
                        version="%(prog)s {ver}".format(ver=__version__))

    # Proxy Configuration
    parser.add_argument("-lh",
                        "--host",
                        help="proxy listen host.",
                        dest="listen_host",
                        default="127.0.0.1")
    parser.add_argument("-lp",
                        "--port",
                        help="proxy listen port",
                        dest="listen_port",
                        type=int,
                        default=8080)
    parser.add_argument("-s",
                        "--socks",
                        help="use as socks proxy (not http proxy)",
                        action='store_true')
    parser.add_argument(
        "-a",
        "--auth",
        help="set proxy authentication (format: 'username:pass')",
        dest="auth",
        default="")
    parser.add_argument("-i",
                        "--insecure",
                        help="insecure ssl",
                        action='store_true')
    parser.add_argument("-d",
                        "--debug",
                        help="Debug Log.",
                        action="store_true")

    # MultiTor Configuration
    parser.add_argument("-p",
                        "--tor-processes",
                        help="number of tor processes in the cycle",
                        dest="processes",
                        type=int,
                        default=2)
    parser.add_argument("-c",
                        "--tor-cmd",
                        help="tor cmd (executable path + arguments)",
                        dest="cmd",
                        default="tor")
    parser.add_argument("-e",
                        "--tor-config",
                        help="tor extended json configuration",
                        dest="config",
                        default="{}")

    # When To Change IP Address
    parser.add_argument(
        "--on-count",
        help="change ip every x requests (resources also counted)",
        type=int,
        default=0)
    parser.add_argument(
        "--on-string",
        help="change ip when string found in the response content",
        default="")
    parser.add_argument(
        "--on-regex",
        help="change ip when regex found in The response content",
        default="")
    parser.add_argument("--on-rst",
                        help="change ip when connection closed with tcp rst",
                        action="store_true")
    parser.add_argument("--on-error-code",
                        help="change ip when a specific status code returned",
                        type=int,
                        default=0)

    sys_args = vars(parser.parse_args(args=args))
    mitmdump_args = [
        '--scripts',
        __file__,
        '--mode',
        'socks5' if sys_args['socks'] else 'regular',
        '--listen-host',
        sys_args['listen_host'],
        '--listen-port',
        str(sys_args['listen_port']),
        '--set',
        f'tor_cmd={sys_args["cmd"]}',
        '--set',
        f'tor_config={sys_args["config"]}',
        '--set',
        f'tor_processes={sys_args["processes"]}',
        '--set',
        f'on_string={sys_args["on_string"]}',
        '--set',
        f'on_regex={sys_args["on_regex"]}',
        '--set',
        f'on_count={sys_args["on_count"]}',
        '--set',
        f'on_error_code={sys_args["on_error_code"]}',
    ]
    if sys_args['auth']:
        mitmdump_args.extend([
            '--proxyauth',
            sys_args["auth"],
        ])

    if sys_args['on_rst']:
        mitmdump_args.extend([
            '--set',
            f'on_rst',
        ])

    if sys_args['debug']:
        mitmdump_args.extend([
            '--verbose',
        ])

    if sys_args['insecure']:
        mitmdump_args.extend([
            '--ssl-insecure',
        ])
    return mitmdump(args=mitmdump_args)
示例#8
0
def run():
    scriptpath = os.path.join(bindir, 'script.py')
    assert os.path.exists(scriptpath), 'script.py not found'
    sys.argv += ['-s', scriptpath]
    sys.exit(mitmdump())
示例#9
0
def test_mitmdump(event_loop, tdata):
    asyncio.set_event_loop(event_loop)
    main.mitmdump([
        "-s", tdata.path(shutdown_script),
        "-q", "-p", "0",
    ])
示例#10
0
async def test_mitmdump():
    main.mitmdump([
        "-q",
        "-p", "0",
        "-s", shutdown_script
    ])
示例#11
0
class Page:

    def response(self,flow:mitmproxy.http.HTTPFlow):
        if "https://stock.xueqiu.com/v5/stock/batch/quote.json?" in flow.request.url and "x=" in flow.request.url:
            data = json.loads(flow.response.text)
            data["data"]["items"][0]["quote"]["name"] = "toyaya1"
            data["data"]["items"][1]["quote"]["name"] = "toyaya2"
            data["data"]["items"][2]["quote"]["name"] = "toyaya3"
            data["data"]["items"][3]["quote"]["name"] = "toyaya4"

            data["data"]["items"][0]["quote"]["current"] = "0"

            data["data"]["items"][0]["quote"]["percent"] = "0.01"
            data["data"]["items"][1]["quote"]["percent"] = "0"
            data["data"]["items"][2]["quote"]["percent"] = "-3.00"
            data["data"]["items"][3]["quote"]["percent"] = "65.9287626373839393003039383873737373"

            flow.response.text = json.dumps(data)


addons = [
    Page()
]

if __name__ == '__main__':
    from mitmproxy.tools.main import mitmdump
    mitmdump(['-p', '1130', "-s", __file__])


示例#12
0
def main(args=None):
    if args is None:
        args = sys.argv[1:]

    parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
    parser.add_argument("-v",
                        "--version",
                        action="version",
                        version="%(prog)s {ver}".format(ver=__version__))

    # Proxy Configuration
    parser.add_argument("-lh",
                        "--host",
                        help="Proxy Listen Host.",
                        dest="listen_host",
                        default="127.0.0.1")
    parser.add_argument("-lp",
                        "--port",
                        help="Proxy Listen Port.",
                        dest="listen_port",
                        type=int,
                        default=8080)
    parser.add_argument("-s",
                        "--socks",
                        help="Use As Socks Proxy (Not HTTP Proxy).",
                        action='store_true')
    parser.add_argument(
        "-a",
        "--auth",
        help="Set proxy authentication (Format: 'username:pass').",
        dest="auth",
        default="")
    parser.add_argument("-i",
                        "--insecure",
                        help="Insecure SSL.",
                        action='store_true')
    parser.add_argument("-d",
                        "--debug",
                        help="Debug Log.",
                        action="store_true")

    # MultiTor Configuration
    parser.add_argument("-p",
                        "--tor-processes",
                        help="Number Of Tor Processes On The Cycle.",
                        dest="processes",
                        type=int,
                        default=2)
    parser.add_argument("-c",
                        "--tor-cmd",
                        help="Tor Cmd (Executable Path + Arguments).",
                        dest="cmd",
                        default="tor")

    # When To Change IP Address
    parser.add_argument(
        "--on-count",
        help="Change IP Every x Requests (Resources Also Counted).",
        type=int,
        default=0)
    parser.add_argument(
        "--on-string",
        help="Change IP When String Found On The Response Content.",
        default="")
    parser.add_argument(
        "--on-regex",
        help="Change IP When Regex Found On The Response Content.",
        default="")
    parser.add_argument("--on-rst",
                        help="Change IP When Connection Closed With TCP RST.",
                        action="store_true")

    sys_args = vars(parser.parse_args(args=args))
    mitmdump_args = [
        '--scripts',
        __file__,
        '--mode',
        'socks5' if sys_args['socks'] else 'regular',
        '--listen-host',
        sys_args['listen_host'],
        '--listen-port',
        str(sys_args['listen_port']),
        '--set',
        f'tor_cmd={sys_args["cmd"]}',
        '--set',
        f'tor_processes={sys_args["processes"]}',
        '--set',
        f'on_string={sys_args["on_string"]}',
        '--set',
        f'on_regex={sys_args["on_regex"]}',
        '--set',
        f'on_count={sys_args["on_count"]}',
    ]
    if sys_args['auth']:
        mitmdump_args.extend([
            '--proxyauth',
            sys_args["auth"],
        ])

    if sys_args['on_rst']:
        mitmdump_args.extend([
            '--set',
            f'on_rst',
        ])

    if sys_args['debug']:
        mitmdump_args.extend([
            '--verbose',
        ])

    if sys_args['insecure']:
        mitmdump_args.extend([
            '--ssl-insecure',
        ])
    return mitmdump(args=mitmdump_args)
示例#13
0
        """
        pass

    def response(self, flow: mitmproxy.http.HTTPFlow):
        """
            The full HTTP response has been read.
        """
        if "https://stock.xueqiu.com/v5/stock/batch/quote.json?_t" in flow.request.url and "x=" in flow.request.url:
            # 把str数据类型转换为json格式
            data = json.loads(flow.response.text)
            # 修改雪球股票名称数据
            # data["data"]["items"][0]["quote"]["name"] = "多多"
            # data["data"]["items"][1]["quote"]["name"] = "倾心"
            # data["data"]["items"][2]["quote"]["name"] = "hogwarts3"
            # 修改雪球涨跌幅数据
            data["data"]["items"][0]["quote"]["percent"] = "-0.01"
            data["data"]["items"][1]["quote"]["percent"] = "0.01"
            data["data"]["items"][2]["quote"]["percent"] = "0"

            # 修改相应数据
            flow.response.text = json.dumps(data)


addons = [Events()]

if __name__ == '__main__':
    from mitmproxy.tools.main import mitmdump

    # 使用debug模式启动mitmdump
    mitmdump(['-p', '8888', '-s', __file__])
示例#14
0
            # 当数据类型 为 list 的时候, 添加到结构内,并继续递归遍历,
            # 知道数据类型不为可迭代对象时
            data = [self.process_data(value) for value in data]
        else:
            data = data
        return data

    def change_name_by_number(self, name, number):
        # print('*************************************')
        # print(f'before name: {name}, {number}')
        if (number % 3) == 1:
            name *= 2
        elif (number % 3) == 2:
            name = ''
        # print(f'after name: {name}, {number}')
        # print('*************************************')
        return name


addons = [
    Counter()
]


if __name__ == '__main__':

    sys.argv = [__file__, "-s", __file__]
    #
    # 官方要求必须主线程
    mitmdump()
示例#15
0
def test_mitmdump():
    main.mitmdump(["-q", "-s", shutdown_script])
示例#16
0
# -*- coding:UTF-8 -*-

import json

import mitmproxy.http
from mitmproxy import http
from mitmproxy import ctx


class Events:
    def request(self, flow: mitmproxy.http.HTTPFlow):
        if 'stock.xueqiu.com/v5/stock/batch/quote.json' in flow.request.url and \
                '_s' in flow.request.url:
            flow.response = http.HTTPResponse.make(
                200,
                open('quote.json', encoding='utf-8').read())


addons = [Events()]

if __name__ == '__main__':
    from mitmproxy.tools.main import mitmdump

    mitmdump(['-p', '8080', "-s", __file__])
示例#17
0
import json
import mitmproxy.http


class Event:
    def response(self, flow: mitmproxy.http.HTTPFlow):
        # 修改数据在响应体进行修改
        # if 判断该地址是不是在flow体里,为了排除相同地址加了判断条件“x=”
        # flow.request.url  folw包含请求和响应数据,所以要找flow里的request里的url
        if "https://stock.xueqiu.com/v5/stock/batch/quote.json?_t" in flow.request.url and "x=" in flow.request.url:
            # 拿到的响应数据是json结构体,需要转换成python结构体,json.loads方法
            data_js = json.loads(flow.response.text)
            # 在结构体里进行精准定位到需要修改数据的名称,并修改
            data_js["data"]["items"][0]["quote"]["name"] = "坨坨"
            data_js["data"]["items"][0]["quote"]["percent"] = "-2"
            data_js["data"]["items"][0]["quote"]["current"] = "9999999"
            # 数据修改完后,再将python结构体转换乘json结构体,json.dump方法
            flow.response.text = json.dumps(data_js)


# 固定写法addons 实列化Event()
addons = [Event()]

if __name__ == '__main__':
    from mitmproxy.tools.main import mitmdump
    # __file__指当前所要执行的文件
    mitmdump(["-p", "8888", "-s", __file__])
示例#18
0
        if isinstance(data, dict):

            for k, v in data.items():
                data[k] = self.number_mod(v, times)
        elif isinstance(data, list):
            # new_list = []
            # for i in data:
            #     new_list.append(number_mod(i, times))
            # data = new_list   # 如果有列表嵌套列表
            data = [self.number_mod(i, times) for i in data]

        elif isinstance(data, float):
            data = data * times
        else:
            data = data

        return data


addons = [
    Events()
]

if __name__ == "__main__":
    from mitmproxy.tools.main import mitmdump
    # 使用带-s的debug模式运行
    # curl 模拟请求带参数--ssl-no-revoke
    mitmdump(["-p", "8080", "-s", __file__])

示例#19
0
        if "https://stock.xueqiu.com/v5/stock/batch/quote.json?_t=" in flow.request.pretty_url:
            # 拿到响应数据信息
            # flow.response.text 是str 属性,所以如果要是操作
            # 这个对象的话,必须转换为python 字典的数据结构
            # 否则就只能使用和str 相关的 方法
            data = json.loads(flow.response.text)
            data["data"]["items"][0]["quote"]["name"] = "hogwartsssssssssss"
            flow.response.text = json.dumps(data)
        # if "http://stuq.ceshiren.com:8089/report/showMapLocal" in flow.request.url:
        #     flow.response.text = '{"resultCode":1,"message":"成功","data":"hogwarts"}'
        #     print(flow.response.text)

    def error(self, flow: mitmproxy.http.HTTPFlow):
        """
            An HTTP error has occurred, e.g. invalid server responses, or
            interrupted connections. This is distinct from a valid server HTTP
            error response, which is simply a response with an HTTP error code.
        """
        pass


addons = [Events()]
if __name__ == '__main__':

    from mitmproxy.tools.main import mitmdump
    # 使用debug模式启动mitmdump
    # 需要传入的是一个列表,列表包含命令行所使用的启动参数信息
    # 端口传入必须为字符串的格式
    #mitmdump -p 8888 -s /Users/lixu/project/HogwartsLG7/test_mock/mitm_s.py
    mitmdump(['-p', '8080', '-s', __file__])
示例#20
0
import re
import sys
from mitmproxy.tools.main import mitmdump

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(mitmdump())