首页 > 其他分享 >接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程

时间:2023-11-10 13:04:16浏览次数:39  
标签:info mitmproxy 字节 request 代理 Mitmproxy str 字符串 抓包


Mitmproxy代理配置及接口加解密详细教程

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_接口自动化

官方网站:Event Hooks & API (mitmproxy.org)

本节目录展示:


文章目录

  • Mitmproxy代理配置及接口加解密详细教程
  • 客户端下载
  • 安装证书
  • mitmproxy代理ios设备
  • 启动服务
  • ios设备配置代理
  • 使用web抓取
  • 代码过滤处理
  • 加解密
  • 字符替换
  • 字符串转二进制
  • 字符串转字节
  • 实际演示
  • 解密代码


客户端下载

方式一

https://mitmproxy.org/downloads/

方式二

安装 mitmproxy

pip install mitmproxy

mitmproxy 提供了三个命令,启动模式不同:

mitmproxy 提供一个命令行界面(该命令不支持windows)。
mitmdump 提供一个简单的终端输出。
mitmweb 提供一个浏览器界面。

mitmproxy -p 指定的端口号
mitmdump -p 指定的端口号
mitmweb -p 指定的端口号

常用参数

-h 帮助信息
-p 修改监听端口
-s 加载 python 脚本

安装证书

注意:需要先开启代理连接后进行安装

需要配置代理进行安装,或者直接进入安装mitmproxy目录拿证书进行安装。

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_网络代理_02

在连接mitmproxy之后,手机或设备需要设置代理,输入 http://mitm.it/ 安装证书

http://mitm.it/

mitmproxy代理ios设备

启动服务

指定8899端口启动服务

mitmdump -p 8899

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_字符串_03

ios设备配置代理

确保你的计算机和 iOS 设备连接到同一个局域网。

1、获取计算机IP

ipconfig (Windows)
ifconfig (Mac/Linux)

2、ios设备配置代理,在 iOS 设备上打开设置(Settings)应用程序。

3、点击 Wi-Fi,并找到你所连接的 Wi-Fi 网络。点击网络名称旁边的 “i” 图标以查看网络详细信息。

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_抓包_04

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_接口自动化_05

4、在网络详细信息页面中,向下滚动并找到 “HTTP 代理”(HTTP Proxy)选项。选择 “手动”(Manual)。

5、在 “服务器”(Server)字段中输入 mitmproxy 运行计算机的 IP 地址,并在 “端口”(Port)字段中输入 mitmproxy 的监听端口,默认为 8080。

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_字符串_06

6、保存设置,并关闭设置应用程序。

7、浏览器输入http://mitm.it/进行证书的安装。

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_字符串_07

8、前往设置 证书的信任设置: 设置 -> 通用-> VPN与设备管理 -> mitmproxy,点击进行安装

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_mitmproxy_08

9、安装成功

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_抓包_09

10、信任证书,通用 -> 关于本机 -> 下拉到 证书信任设置 -> 找到mitmproxy点击开关信任。

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_网络代理_10

现在,你的 iOS 设备将经过 mitmproxy,并且可以在 mitmproxy 上拦截和修改所有的网络请求和响应。你可以在 mitmproxy 的界面中查看和操作这些请求和响应。

安卓一般在安全-加密与凭据-用户,有时候还有去更多WLAN设置里面安装证书

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_mitmproxy_11

报错

Client TLS handshake failed. Client and mitmproxy cannot agree on a TLS version to use. You may need to adjust mitmproxy’s tls_version_client_min option.

使用如下命令即可,忽略就行。目前没啥影响。

mitmdump -p 8899  --set tls_version_client_min=SSL3

使用web抓取

mitmweb -p 8899

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_接口自动化_12

代码过滤处理

示列代码 mitmproxt_demo01.py

# -*- coding: utf-8 -*-
'''
@Time : 2023/8/7 18:16
@Email : Lvan826199@163.com
@公众号 : 梦无矶的测试开发之路
@File : mitmproxy示列.py
'''
__author__ = "梦无矶小仔"

import mitmproxy
from mitmproxy import ctx,http



class Counter:
    def __init__(self):
        pass

    # 所有发出的请求数据包都会被这个方法所处理
    def request(self, flow: mitmproxy.http.HTTPFlow):
        # 获取请求对象
        request = flow.request
        # 实例化输出类
        info = ctx.log.info
        # 打印请求的url
        info(request.url)
        # 打印请求方法
        info(request.method)
        # 打印host头
        info(request.host)
        # 打印请求端口
        info(str(request.port))
        # 打印所有请求头部
        info(str(request.headers))
        # 打印cookie头
        info(str(request.cookies))
        print("请求的参数data----------------------")
        info(str(request.data))
        print("请求的参数data----------------------")

    # 所有服务器响应的数据包都会被这个方法处理
    def response(self, flow: mitmproxy.http.HTTPFlow):
        # 获取响应对象
        response = flow.response
        # 实例化输出类
        info = ctx.log.info
        # 打印响应码
        info(str(response.status_code))
        # 打印所有头部
        info(str(response.headers))
        # 打印cookie头部
        info(str(response.cookies))
        # 打印响应报文内容
        info(str(response.text))


addons = [
    Counter()
]

通过脚本启动

mitmweb -p 8899 -s .\mitmproxy_demo01.py

加解密

python 在 Windows下使用AES时要安装的是pycryptodome 模块

pip install pycryptodome

python 在 Linux下使用AES时要安装的是pycrypto模块

pip install pycrypto

字符替换

aaa = '151691566822749_NEW_RDA_LOADOKaRgN'

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_字符串_13

这会SOH对应的是ACCIC码1

# 所以可以这样进行替换
repl_aaa = aaa.replace(chr(1), " ")

接口自动化&抓包&代理神器-Mitmproxy代理配置详细教程_接口自动化_14

字符串转二进制

string = "Hello World"
binary = " ".join(format(ord(char), '08b') for char in string)
print(binary)

运行这段代码,它将输出 01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100,这就是 “Hello World” 的二进制表示。

在这个示例中,format(ord(char), '08b') 将每个字符转换为 8 位的二进制字符串,然后使用 join() 函数以空格分隔每个字符的二进制表示,最终得到一个包含整个字符串二进制表示的字符串。

字符串转字节

在 Python 中,可以使用字符串的 encode() 方法将字符串转换为字节(bytes)类型的数据。你可以指定一个字符编码来确定字节表示中的字符编码方式。

下面是一个示例代码,演示如何将字符串转换为字节:

string = "Hello World"
bytes_data = string.encode('utf-8')
print(bytes_data)

运行这段代码,它将输出 b'Hello World',这就是字符串 “Hello World” 的字节表示。

在这个示例中,encode() 方法将字符串使用 UTF-8 编码方式转换为字节类型的数据。默认情况下,Python 使用 UTF-8 作为字符编码方式。你可以根据具体的需求选择其他字符编码方式,例如 “utf-16”、“latin-1” 等。

需要注意的是,字节类型的数据表示为以 b 开头的字符串,表示它是字节数据而不是普通的字符串。

实际演示

aaa = '151691566822749_NEW_RDA_LOADOKaRgNxBJEpvYo1FdZQu9d85ExmqB97SpGUPvMmSYZXIauvSu9IgrpJSK5PAs4DMMNONB2daybYwrdCjCWKUOPUb1KTPyiHYfo9EVg5jMXkDMT7xebOYk0x0loFWsSEKguYmVe5U2jAc5EDPn8nIBLTxGXSeL/S6ZbXJhEszrI1FJ/CYxjZfQKVQhMENxsN8O/yhK2AgXQe4CDQT3+sxlLCFw5XcG4IGoD8kyyHbpulwjOQW98orOf2DBZkHjxFqjFo6G/7SVZ3wr0ER05uAopJpc8XBJSTfhNAzKT2JwatMG7beFxUzrBeuNJp7MHKJUUYjfUNeqhGF1dKaya1HdOxfUoWuCMUV0XMroNItipbLj0ZX5ZfftN/eskoZjDvYDvU0Oyt6xC7RZVIOLbyOlmWQ8Pl7NHzqFeVUqViVyGIaA8HsivAw+lStBo+W6qDCbkgAAg6Z+8fsiSjgDSgpLJSwBqO75HzRUDRHhHc9/Wqqdeq2pE6PnlrJ6XWrXooBwg0bbecb50d88e230df396fb6a53532280;'

binary = aaa.encode('utf-8')

print(binary)

输出

b'1\x015\x011691566822749\x01_NEW_RDA_LOADOK\x01aRgNxBJEpvYo1FdZQu9d85ExmqB97SpGUPvMmSYZXIauvSu9IgrpJSK5PAs4DMMNONB2daybYwrdCjCWKUOPUb1KTPyiHYfo9EVg5jMXkDMT7xebOYk0x0loFWsSEKguYmVe5U2jAc5EDPn8nIBLTxGXSeL/S6ZbXJhEszrI1FJ/CYxjZfQKVQhMENxsN8O/yhK2AgXQe4CDQT3+sxlLCFw5XcG4IGoD8kyyHbpulwjOQW98orOf2DBZkHjxFqjFo6G/7SVZ3wr0ER05uAopJpc8XBJSTfhNAzKT2JwatMG7beFxUzrBeuNJp7MHKJUUYjfUNeqhGF1dKaya1HdOxfUoWuCMUV0XMroNItipbLj0ZX5ZfftN/eskoZjDvYDvU0Oyt6xC7RZVIOLbyOlmWQ8Pl7NHzqFeVUqViVyGIaA8HsivAw+lStBo+W6qDCbkgAAg6Z+8fsiSjgDSgpLJSwBqO75HzRUDRHhHc9/Wqqdeq2pE6PnlrJ6XWrXooBwg\x01\x010bbecb50d88e230df396fb6a53532280\x01;'

这里看起来没什么,但是实际的加解密都要通过这个手段去进行一系列的操作,可以说这一步是基操。

解密代码

涉及相关机密,无法展示,这一块接口方面如果是加密,会有对应的secret秘钥。

这一块如果你做接口了需要进行解密,你可以找对应的开发给你提供秘钥。

这个秘钥就像我们django的settings.py文件中的SECRET_KEY字段。


标签:info,mitmproxy,字节,request,代理,Mitmproxy,str,字符串,抓包
From: https://blog.51cto.com/u_15800928/8296130

相关文章

  • 如何使用静态IP代理上网?静态IP代理带来哪些好处?
    随着互联网的普及,越来越多的人开始使用代理上网。其中,静态IP代理作为一种稳定的网络加速方式,受到了越来越多用户的青睐。那么,如何使用静态IP代理上网呢?静态IP代理又带来哪些好处呢?下面就为大家详细介绍。一、如何使用静态IP代理上网?使用静态IP代理上网并不复杂,只需按照以下步骤即可......
  • 24. 从零用Rust编写正反向代理,细说HTTP行为中的几种定时器
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmpro......
  • socks5代理怎么配置?socks5代理的优点有哪些?
    随着网络威胁和数据泄露的数量不断增加,在浏览互联网时保护个人信息并保持匿名变得至关重要。实现此目的的一种有效方法是使用Socks5代理IP。如今Socks5代理被广泛应用于跨境电商/社媒平台、SEO业务、网络抓取等领域。一、socks5代理怎么配置?要配置socks5代理,您需要按照以下步骤进行......
  • nginx 配置反向代理
    什么是反向代理?代理:通过客户机的配置,实现让一台服务器(代理服务器)代理客户机,客户的所有请求都交给代理服务器处理。反向代理:用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器。nginx可以当做反向代理服务器来使用:我们需要提前在nginx中配置好反向......
  • window系统通过反向代理部署nodejs
       https://dev.to/petereysermans/hosting-a-node-js-application-on-windows-with-iis-as-reverse-proxy-397b ......
  • Java:SpringBoot实现JDK动态代理和CGLIB动态代理
    (目录)需要代理的对象//接口publicinterfacePayService{voidpay();}//实现publicclassAliPayServiceimplementsPayService{@Overridepublicvoidpay(){System.out.println("AliPayService");}}1.JDK动态代理在JDK动态代......
  • Rola-IP代理IP(Http代理/socks5代理/htttps代理) 评测
    Rola-IP评测现在就来探寻为什么Rola-IP被视为世界上最好的住宅代理服务提供商之一。从我们的评论中学习并了解其优缺点。Rola-IP概述您是否打算尝试Rola-IP(Rola-IP)代理服务?那您必须阅读Rola-IP评测,以了解是否可以将其用于打算用作代理的内容。毫无疑问,Rola-IP代理是最好的代理,但是......
  • 推荐一些socket工具,TCP、UDP调试、抓包工具
    推荐一些socket工具,TCP、UDP调试、抓包工具https://www.cnblogs.com/porter/p/7838753.html如何使用TCP|UDPSOCKET调试工具联机超高频读卡器HXU7881-6DBI/IPhttps://zhuanlan.zhihu.com/p/648752372?utm_id=0......
  • 8. 从零用Rust编写正反向代理, HTTP改造篇之HPACK原理
    wmproxywmproxy是由Rust编写,已实现http/https代理,socks5代理,反向代理,静态文件服务器,内网穿透,配置热更新等,后续将实现websocket代理等,同时会将实现过程分享出来,感兴趣的可以一起造个轮子法项目++wmproxy++gite:https://gitee.com/tickbh/wmproxygithub:https://github.com/tic......
  • Android动态代理详解
    动态代理在java里面算是一种比常用的技术,它和静态代理的区别在于静态代理需在编译的时候代理类就已经确定了,而动态代理的代理类是在运行的时候动态生成的。例如使用retrofit的时候我们只需要定义好interface:publicinterfaceGitHubService{@GET("users/{user}/repos")Ca......