mitmproxy代理

mitmproxy

mitmproxy是一个代理工具(软件安装 或 Python模块安装),实现代理请求(拦截请求或修改请求)。

1. 网络代理

网络代理是一种位于客户端和服务器之间的中间服务器,它充当客户端与目标服务器之间的中间人。当客户端发送请求时,请求首先被发送到代理服务器,然后由代理服务器转发给目标服务器,并将目标服务器的响应返回给客户端。

代理服务器的作用可以有多种形式,包括:

  1. 隐藏真实的客户端IP地址:代理服务器可以屏蔽客户端的真实IP地址,使目标服务器无法直接获取到客户端的真实位置信息。这种方式可以提供一定的匿名性和隐私保护。
  2. 缓存和加速:代理服务器可以缓存目标服务器的响应,当其他客户端请求相同的资源时,代理服务器可以直接返回缓存的响应,减少了对目标服务器的访问,提高了访问速度和网络效率。
  3. 过滤和访问控制:代理服务器可以根据设置的规则对请求进行过滤和访问控制。例如,可以通过代理服务器实现对特定网站或内容的屏蔽,或者对特定客户端的访问进行限制。
  4. 突破网络限制:在某些情况下,代理服务器可以用于突破网络限制。例如,当访问某些网站受到地理位置限制或网络审查时,可以通过使用代理服务器来绕过这些限制。
  5. 负载均衡:代理服务器可以作为负载均衡器,将请求分发到多个目标服务器上,以实现更好的性能和可靠性。

mitmproxy是一款流行的开源代理工具,用于拦截、修改和观察网络流量。它可以用于网络安全测试、调试和逆向工程等场景。

请添加图片描述

2. 安装

在安装前需要去下载Visual C++ Build Tools for Visual Studio 2015安装到电脑。

https://my.visualstudio.com/Downloads?q=Visual%20Studio%202015%20update%203

请添加图片描述

解压 mu_visual_cpp_build_tools_2015_update_3_x64_dvd_dfd9a39c.iso文件,然后默认安装。

用pip安装mitmproxy:

pip install mitmproxy

3. Https请求

如果想要让mitmproxy支持:http和https请求,就需要安装证书。

3.1 启动mitmproxy

>>>mitmdump -q  -p 8888 -s test.py

请添加图片描述

from mitmproxy import http


def request(flow: http.HTTPFlow):
    print("请求->", flow.request.url)


def response(flow: http.HTTPFlow):
    ...

3.2 获取证书

在电脑 C:\Users\Administrator\.mitmproxy 中去获取。

请添加图片描述

双击下载证书

请添加图片描述

请添加图片描述
请添加图片描述

3.3 配置代理

请添加图片描述

3.4 运行测试

请添加图片描述

4. 请求

4.1 读取请求

from mitmproxy import http
from mitmproxy.http import Request


def request(flow):
    print("请求-->", flow.request.url)
    print("请求-->", flow.request.host)
    print("请求-->", flow.request.path)
    print("请求-->", flow.request.query)
    print("请求-->", flow.request.cookies)
    print("请求-->", flow.request.headers)
    print("请求-->", flow.request.method)
    print("请求-->", flow.request.content)


def response(flow: http.HTTPFlow):
    pass

4.2 修改请求

from mitmproxy import http


def request(flow):
    flow.request.url = "https://www.baidu.com/"


def response(flow: http.HTTPFlow):
    pass

请添加图片描述

4.3 拦截请求

可以拦截请求,并放回指定内容

from mitmproxy import http
from mitmproxy.http import HTTPFlow
from mitmproxy.http import Response


def request(flow: HTTPFlow):
    if flow.request.url.startswith("https://dig.chouti.com/"):
        flow.response = Response.make(
            200,  # (optional) status code
            b"Hello World",  # (optional) content
            {"Content-Type": "text/html"}  # (optional) headers
        )


def response(flow: http.HTTPFlow):
    pass

请添加图片描述

也可以直接kill请求

from mitmproxy import http
from mitmproxy.http import Request
from mitmproxy.http import HTTPFlow


def request(flow: HTTPFlow):
    if flow.request.url.startswith("https://dig.chouti.com/"):
        flow.kill()


def response(flow: http.HTTPFlow):
    pass

5. 响应

5.1 读取响应

from mitmproxy import http
from mitmproxy.http import HTTPFlow


def request(flow: HTTPFlow):
    ...


def response(flow: http.HTTPFlow):
    print(flow.request.url)

    print(flow.response.status_code)
    print(flow.response.cookies)
    print(flow.response.headers)
    print(flow.response.content)

5.2 修改响应

from mitmproxy import http
from mitmproxy.http import HTTPFlow, Response


def request(flow: HTTPFlow):
    ...


def response(flow: http.HTTPFlow):
    flow.response = Response.make(
        200,  # (optional) status code
        b"Hello World",  # (optional) content
        {"Content-Type": "text/html"}  # (optional) headers
    )

请添加图片描述

6. 案例:共享账号

6.1 登录bilibili获取cookies

from mitmproxy import http
from mitmproxy.http import HTTPFlow


def request(flow: HTTPFlow):
    print(flow.request.url)
    print(flow.request.cookies)



def response(flow: http.HTTPFlow):
    ...

请添加图片描述

6.2 在代理请求中设置cookies

from mitmproxy import http
from mitmproxy.http import HTTPFlow


def request(flow: HTTPFlow):
    print(flow.request.url)
    print(flow.request.cookies)
    flow.request.cookies = [['_uuid', 'A98A10A1C-9F33-6339-17E4-CD8671029FB5A86227infoc'],
                            ['buvid3', '6F2EA161-81E8-FC5D-692F-FF62C048B83B86528infoc'], ['b_nut', '1709354487'],
                            ['buvid4',
                             'FDE22D0E-55C2-7A05-BE12-D69A19F71C7586528-024030204-nzup34dDLssl%2BNgRMbI%2BUQ%3D%3D'],
                            ['enable_web_push', 'DISABLE'], ['FEED_LIVE_VERSION', 'V8'],
                            ['header_theme_version', 'CLOSE'], ['CURRENT_FNVAL', '4048'],
                            ['rpdid', "|(~|mm|k)~l0J'u~|mJlRl|m"], ['b_lsid', '6FDF9248_18DFEAFE967'],
                            ['home_feed_column', '5'], ['browser_resolution', '1536-239'], ['bili_ticket',
                                                                                            'eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDk2MzcwNzEsImlhdCI6MTcwOTM3NzgxMSwicGx0IjotMX0.qxpceIj8gLlNQ33eR9d5jxfizfYD_AWX_zpvHAFixY4'],
                            ['bili_ticket_expires', '1709637011'], ['bp_video_offset_250595597', '904259047290568723'],
                            ['fingerprint', 'bc08d5f7f0d84ff74bf64c3b8cead4fc'], ['buvid_fp_plain', 'undefined'],
                            ['buvid_fp', 'bc08d5f7f0d84ff74bf64c3b8cead4fc'], ['SESSDATA',
                                                                               'e3f51de8%2C1724929938%2Cb3219%2A32CjDQyE1hfakSZT7vrNGmyYTP3Es7buyebKSAFmqg5JIZOH4RfRvNZRNydfq3JlRMLlcSVjd4SE0xc2I5T0dtVXFMMzBLbnhXZW5QNTNyeUZLVjNteDVaRUZ4V1FSQ2gwSXBCb09NLVFzc2cyRmpsNkJPOE9jVE9xdGlIS3gwZHlQWTJaX182SkZnIIEC'],
                            ['bili_jct', 'a74e7345a811680a745797300a7ae525'], ['DedeUserID', '250595597'],
                            ['DedeUserID__ckMd5', 'dd8e5953de09a630'], ['sid', 'qmre1dgw']]


    def response(flow: http.HTTPFlow):
        ...

在配置完cookies后在被代理的电脑打开bilibili会显示为登录状态

请添加图片描述

若多台电脑接入代理则可以共享这个账号

  • 57
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mitmproxy是一款强大的HTTP代理服务器,可以拦截和修改HTTP请求和响应,可以用于调试和测试HTTP应用程序,也可以用于抓取和分析HTTP流量。以下是mitmproxy的一些常用用法: 1. 启动mitmproxy代理服务器 在命令行中输入以下命令即可启动mitmproxy代理服务器: ``` mitmproxy ``` 默认情况下,mitmproxy会监听本地的8080端口,可以通过设置参数修改监听端口、代理模式和Addon脚本等。 2. 使用Addon拦截和处理HTTP请求和响应 可以使用Addon机制实现对HTTP请求和响应的拦截和处理。可以继承mitmproxy.Addon类,重写其中的方法实现自定义功能,例如对请求和响应进行分析、记录和修改等。 以下是一个自定义的Addon,实现了对HTTP请求和响应的记录和修改: ```python from mitmproxy import http, ctx class MyAddon(http.HTTPAddon): def request(self, flow: http.HTTPFlow) -> None: # 记录HTTP请求 ctx.log.info(f"Request {flow.request.url}") def response(self, flow: http.HTTPFlow) -> None: # 修改HTTP响应 flow.response.content = b"Hello, world!" flow.response.headers["content-type"] = "text/plain" # 记录HTTP响应 ctx.log.info(f"Response {flow.request.url}: {flow.response.status_code}") addons = [ MyAddon() ] # 启动mitmproxy代理服务器 from mitmproxy.tools.main import mitmdump mitmdump(['-p', '8080', '-s', __file__] + sys.argv[1:]) ``` 在这个Addon中,重写了request()和response()方法,对HTTP请求进行记录,在HTTP响应中修改内容和头信息,并对HTTP响应进行记录。可以根据需要对请求和响应进行分析、记录和修改等操作。 3. 使用过滤器筛选HTTP请求和响应 可以使用过滤器对HTTP请求和响应进行筛选,例如根据URL、请求方法、请求头、请求体、响应状态码等条件进行筛选。 以下是一个使用过滤器筛选HTTP请求和响应的例子: ```python def request(flow: http.HTTPFlow) -> None: # 只拦截GET请求和URL以"http://example.com"开头的请求 if flow.request.method == "GET" and flow.request.url.startswith("http://example.com"): # 记录HTTP请求 ctx.log.info(f"Request {flow.request.url}") def response(flow: http.HTTPFlow) -> None: # 只拦截响应状态码为200的响应 if flow.response.status_code == 200: # 记录HTTP响应 ctx.log.info(f"Response {flow.request.url}: {flow.response.status_code}") ``` 在这个例子中,使用了过滤器对HTTP请求和响应进行筛选,只拦截GET请求和URL以"http://example.com"开头的请求,只拦截响应状态码为200的响应。可以根据需要对请求和响应进行筛选和处理。 4. 使用mitmdump命令行工具进行HTTP流量分析 mitmdump是mitmproxy的命令行工具,可以用于HTTP流量分析和交互式修改。以下是一些常用的mitmdump命令: - 显示HTTP请求和响应的信息: ``` mitmdump -p 8080 ``` - 显示HTTP请求和响应的详细信息: ``` mitmdump -p 8080 -v ``` - 显示HTTP请求和响应的简要信息: ``` mitmdump -p 8080 -q ``` - 保存HTTP请求和响应的信息到文件: ``` mitmdump -p 8080 -w output.txt ``` - 将HTTP请求和响应的信息转发到另一个HTTP服务器: ``` mitmdump -p 8080 -U http://example.com ``` - 使用Addon拦截和处理HTTP请求和响应: ``` mitmdump -p 8080 -s myaddon.py ``` 可以根据需要使用mitmdump命令进行HTTP流量分析和交互式修改,也可以结合Addon实现自定义的HTTP流量分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林小果呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值