1、mitmdump介绍
  • mitmdump是mitmprxoy的命令行接口,可以实时监控请求,可以对接Python对请求进行处理
  • 有了它我们可以不用手动截获和分析HTTP请求和响应,只需要写好请求和响应的处理逻辑即可
  • 它还可以实现数据的解析、存储等工作,这些过程都可以通过Python实现
  • mitmproxy安装及设置
  • 官方文档
2、mitmdump_python脚本修改请求
  • ① 先准备一个py文件如scripts.py:如对请求的改写,定义了一个request()方法,参数为flow(HTTPFlow对象),通过flow.request属性即可获取到当前的请求对象,然后打印输出了请求的请求头,如将请求头的User-Agent修改成了MitmProxy

    #scripts.py文件
    def request(flow):
        flow.request.headers['User-Agent'] = 'MitmProxy'
        print(flow.request.headers)
    
  • ② cmd输入mitmdump -s scripts.py,即指定脚本scripts.py来处理截获的数据;mitmdump -w 文件名(把截获的数据保存到文件中);mitmdump -p 8099 (指定监听端口)

    mitmdump -s scripts.py -p 8080
    
  • scripts.py脚本执行效果:在浏览器和手机分别打开http://httpbin.org/get

    • 控制台端显示如下:控制台输出了修改后的Headers内容,其User-Agent的内容时mitmproxy
      在这里插入图片描述
    • 手机端显示如下:手机端返回的结果的Headers实际上就是请求头的Headers,User-Agent被修改成了MitmProxy
      在这里插入图片描述
3、mitmdump_python脚本日志输出
  • mitmdump有专门的日志输出功能,可以设定不同级别以不同颜色输出结果,我们把scripts.py脚本修改成如下内容。主要调用了ctx模块的log功能(warning级别最高)

    from mitmproxy import ctx
    def request(flow):
        flow.request.headers['User-Agent'] = 'MitmProxy'
        ctx.log.info(str(flow.request.headers))  # 白色
        ctx.log.warn(str(flow.request.headers))  # 黄色
        ctx.log.error(str(flow.reuquest.headers))  # 红色
    
  • warning级别最高,如控制台打印如下
    在这里插入图片描述

4、mitmdump_request请求常用功能
  • 更多属性详见,如下编辑scripts.py脚本如下,我们可以对以下任意属性进行修改赋值
    from mitmproxy import ctx
    def request(flow):
        request = flow.request
        # 如修改url
    	flow.request.url = 'https:..httpbin.org/get'
        info = ctx.log.info
        info(str(request.headers))
        info(str(request.cookies))
        info(request.host)
        info(request.method)
        info(str(request.port))
        info(request.scheme)
    
  • 控制台打印输出了Requestt的一些常见属性,如URL、Headers、Cookies、Host、Method等
    在这里插入图片描述
5、mitmdump_response响应常用功能
  • mitmdump对应的响应处理接口是response()方法,如下新编辑的scripts.py脚本,可以获取每个请求的响应内容,并对响应的信息提取和存储,即完成爬取
    from mitmproxy import ctx
    def response(flow):
        response = flow.response
        info = ctx.log.info
        info(str(response.status_code))
        info(str(response.headers))
        info(str(response.cookies))
        info(str(response.text))
    
    在这里插入图片描述
6、mitmdump_实战案例
  • 应用场景:当无法进行逆向分析某个加密参数时,可以按此法拦截请求爬取数据
  • 流程步骤:
    • 编写处理逻辑py文件scripts.py > 后台长期启动mitmdump -s scripts.py捕获拦截存储等
    • 其中捕获数据需要自动化的操作,如果是web端可以借助selenium等长期进行翻页,然后scripts.py监控处理。
    • 如果是app端,则可以借助appium等长期翻页,然后scripts.py监控处理,但是appium与手机过于麻烦,也可以借助模拟器,然后纯adb命令操作等
  • mitmdump_实战demo1
  • mitmdump_实战demo2
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐