• mitmproxy的介绍以及配置过程中的问题


    mitmproxy的介绍以及配置过程中的问题

    在这里插入图片描述

    提示:以下是本篇文章正文内容,下面案例可供参考

    一、mitmproxy是什么?

    mitmproxy是一个抓包工具,类似于WireShark、Filddler,并且它支持抓取HTTP和HTTPS协议的数据包,只不过它是一个控制台的形式操作。另外,它还有两个非常有用的组件,一个mitmdump,它是mitmproxy的命令行接口,利用它可以对接python脚本;另一个是mitmweb,它是一个web程序,通过它可以清楚的观察mitmproxy捕获的数据情况,优点类似于Chrome浏览器。

    二、准备工作

    请确保已经正确安装好了mitmproxy,并且手机和PC处于同一个局域网下,同时配置好了mitmproxy的CA证书。

    2.1 安装

    1、linux 安装mitmproxy

    pip3 install mitmproxy
    
    • 1

    2、windows下安装mitmproxy

    下载地址:https://mitmproxy.org/

    添加国内源可以提高下载速度

    pip install mitmproxy -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    
    • 1
    • 2

    此时,可以在微软官网直接下载 c++ 库之类的软件,然后再在命令行进行安装 mitmproxy即可。也可以在网上搜索MicrosoftVCTools2017,进行下载。
    下载地址:https://visualstudio.microsoft.com/zh-hans/downloads

    三、mitmproxy的功能

    mitmproxy有如下几项功能。

    1. 拦截HTTP和HTTPS请求和响应。 -
    2. 保存HTTP会话并进行分析。
    3. 模拟客户端发起请求,模拟服务端返回响应。
    4. 支持Mac和Linux上的透明代理。
    5. 利用Python对HTTP请求和响应进行实时处理。

    四、抓包原理

    和Charles一样,mitmproxy运行于自己的PC上,mitmproxy会在PC的8080端口运行,然后开启一个代理服务,这个服务实际上是一个HTTP/HTTPS的代理。

    手机和PC在同一个局域网内,设置代理为mitmproxy的代理地址,这样手机在访问互联网的时候流量数据包就会流经mitmproxy,mitmproxy再去转发这些数据包到真实的服务器,服务器返回数据包时再由mitmproxy转发回手机,这样mitmproxy就相当于起了中间人的作用,抓取到所有Request和Response,另外这个过程还可以对接mitmdump,抓取到的Request和Response的具体内容都可以直接用Python来处理,比如得到Response之后我们可以直接进行解析,然后存入数据库,这样就完成了数据的解析和存储过程。

    五、mitmproxy证书配置

    mitmproxy和Charles软件一样,需要进行证书配置,为什么要进行证书配置?由于我们要抓取的大部分App页面都采用了HTTPS,也就是经过加密,若没有证书,就无法识别抓取的数据。另外,需要注意的是,mitmproxy与Charles软件一样需要在PC和手机端安装证书。

    5.1 电脑端证书配置

    1. 首先cmd运行一下以下命令,以便在windows系统中产生CA证书

      mitmdump
      
      • 1
    2. 接着在.mitmproxy目录找到CA证书,如下图所示:

    3、双击mitmproxy-ca.p12进入导入证书的页面,点击“下一步”

    3、双击mitmproxy-ca.p12进入导入证书的页面,点击“下一步”

    在这里插入图片描述双击mitmproxy-ca.p12进入导入证书的页面,点击“下一步”

    4、不用输入密码,直接“下一步”

    在这里插入图片描述

    5、选择“将所有的证书都放入下列存储”,接着选择“受信任的根证书颁发机构”

    在这里插入图片描述

    6、最后,弹出警告窗口,直接点击“是”

    在这里插入图片描述

    5.2 手机端代理配置

    1、接着在手机(IOS)上配置证书,先将mitmproxy-ca-cert.pem文件发送至iphone,推荐用邮箱方式,接着在iphone上可以把直接点击附件并安装。最后在手机(ios)“设置”、“通用”、“描述文件与设备管理”,找到“证书信任设置”,信任即可。

    在这里插入图片描述

    在这里插入图片描述

    2、设置手机端代理

    可以在pc(windows)中用cmd命令行,输入命令ipconfig,查看电脑ip,这里ip地址是192.168.31.43

    在这里插入图片描述

    接着在手机上设置代理,其实就是将pc电脑的ip192.168.31.43:8080,设置成代理即可。
    在这里插入图片描述

    配置代理,改为手动

    在这里插入图片描述

    六、命令行交互

    1、mitmdump的启动

    mitmdump
    
    • 1

    2、mitmdump指定端口的启动

    mitmdump -p 8889
    
    • 1

    3、指定python脚本

    mitmdump -p 8889 -s test.py
    
    • 1

    4、保存截获数据

    mitmdump -w  test.txt
    
    • 1

    5、常用接口

    #http.HTTPFlow 实例 flow
    flow.request.headers #获取所有头信息,包含Host、User-Agent、Content-type等字段
    flow.request.url #完整的请求地址,包含域名及请求参数,但是不包含放在body里面的请求参数
    flow.request.pretty_url #同flow.request.url目前没看出什么差别
    flow.request.host #域名
    flow.request.method #请求方式。POST、GET等
    flow.request.scheme #什么请求 ,如https
    flow.request.path # 请求的路径,url除域名之外的内容
    flow.request.get_text() #请求中body内容,有一些http会把请求参数放在body里面,那么可通过此方法获取,返回字典类型
    flow.request.query #返回MultiDictView类型的数据,url直接带的键值参数
    flow.request.get_content()#bytes,结果如flow.request.get_text() 
    flow.request.raw_content #bytes,结果如flow.request.get_content()
    flow.request.urlencoded_form #MultiDictView,content-type:application/x-www-form-urlencoded时的请求参数,不包含url直接带的键值参数
    flow.request.multipart_form #MultiDictView,content-type:multipart/form-data
    时的请求参数,不包含url直接带的键值参数
    #以上均为获取request信息的一些常用方法,对于response,同理
    flow.response.status_code #状态码
    flow.response.text#返回内容,已解码
    flow.response.content #返回内容,二进制
    flow.response.setText()#修改返回内容,不需要转码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    六、遇到的报错总结
    1、mitmproxy–Cannot establish TLS with client (sni: e.crashlytics.com): TlsException(“(-1, ‘Unexpected EOF’)”,) 解决办法

    正确安装电脑端和手机端证书

    2、win10 使用mitmdump 报错 cannot import name ‘soft_unicode‘ from ‘markupsafe‘

    运行mitmdump报错在这里插入图片描述

    可能是Jinja2版本的问题

    1、在命令行输入pip list,查看Jinja2版本

    2、卸载这个包:

    pip uninstall Jinja2
    
    
    • 1
    • 2

    3、到 https://www.lfd.uci.edu/~gohlke/pythonlibs/#jinja2

    找到Jinja2,选择其他版本安装,使用3.0.3正常了,
    在这里插入图片描述

    4、下载.whl文件之后,执行命令

    pip install xxx.whl
    
    • 1

    成功了
    在这里插入图片描述

  • 相关阅读:
    基于JavaSwing开发学生管理系统(登录增删改查)+论文报告 课程设计 大作业
    【闭眼瞎说】为什么速度越快时间越慢
    Camunda 7.x 系列【48】候选用户和用户组
    2.10-CSS基础--盒子模型(下)
    JVM虚拟机-虚拟机性能监控、故障处理工具
    开启算法之旅:hello world!
    Mysql8 创建表,按年/月或其他条件进行分区存储
    设备——工厂的心脏
    【Docker】搭建MySQL主从复制,详细的图文展示
    从头开始机器学习:逻辑回归
  • 原文地址:https://blog.csdn.net/huangbangqing12/article/details/126372950