• Windows 安装mitmproxy 抓包基础教程


    mitmproxy是一个使用python编写的中间人代理工具,跟Fiddle、Charles等等的抓包工具是差不多的,同样可以用于拦截、修改、保存http/https请求。比起Fiddle、Charles,mitmproxy有一个最大的特点是支持python自定义脚本。
    安装mitmproxy工具的话直接到以下网址直接下载,一键安装即可立即使用,也很简单,移动端设置一下端口就直接可以抓包。

    安装完成后,系统会拥有3个命令mitmproxy、mitmdump、mitmweb,该三个命令的区别是交互界面不同而已。
    mitmproxy是会直接提供一个命令行界面,可以实时看到请求的链接。
    mitmdump是没有界面,通过自定义脚本默默的按照自定义脚本工作。
    mitmweb是通过web界面,实时看到请求的链接。
    在命令行上直接输入以上三个命令之一即可开始抓包
    mitmproxy官网:https://mitmproxy.org
    mitmproxy GitHub:https://github.com/mitmproxy/mitmproxy

    以Windows安装mitmproxy为例

    一、抓包原理

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

    二、Windows安装mitmproxy

    pip install mitmproxy

    三、查看mitmproxy版本

    启动mitmproxy一共有三种命令方式
    mitmproxy mitmdump mitmweb

    mitmproxy

    类似于vim编辑器,使用命令操作并查看每一个包的信息

    mitmdump

    mitmdump启动的方式结合了mitmweb打印出的脚本信息和mitmproxy方式启动的包信息,在命令行中查看可能会很难找目标信息,但不需要去进一步的去操作

    mitmweb

    会在本机上启动一个web服务,以便在浏览器查看包信息,相比于命令行界面操作更加简单,命令行则输出脚本运行信息

    Linux系统一般用命令行输入mitmproxy mitmdump

    mitmproxy --version

    如果在Windows系统输入 mitmproxy --version 报错

    Windows 命令一般用mitmdump 和 mitmweb

    mitmdump --version

    四、设置代理并安装CA证书

    手机或者雷电模拟器安装证书
    这里以安卓手机为例,安装CA证书

    Android机打开UC浏览器输入或者自带浏览器 IOS机同理
    输入mitm.it出现下图选择 Android 或者 Apple

    开启抓包:mitmdump 默认端口8080
    mitmdump -p 8888

    五、python脚本写法

    访问请求

    def request(flow):
      ctx.log.warn(str(flow.request.headers))
      print(flow.request.headers)  # 打印请求头
    

    响应请求

    def response(flow):
      ctx.log.warn(str(flow.response.status_code)) # 获取响应的状态码
      print(flow.response.text)  # 响应的文件
    

    日志输出

    mitmdump提供了专门的日志输出功能,可以设定不同级别以不同颜色输出结果。我们把脚本修改成如下内容

    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.request.headers))
    

    六、开始用python脚本抓包

    python脚本可以随便放哪,只要路径正确就没有问题
    mitmdump -p 8888 -s D:/Yuan/mitmdata.py
    抓包过程

    七、mitmproxy脚本

       # -*- coding: utf-8 -*-
    
    import mitmproxy.http
    
    class Counter:
        def __init__(self):
            self.num = 0
    	#设置上游代理
        def request(self, flow: mitmproxy.http.HTTPFlow):
             if flow.request.method == "CONNECT":
                 return
             if flow.live:
                 proxy = ('http://121.228.53.238', '9990')
                 print(flow.request.host)
                 flow.live.change_upstream_proxy_server(proxy)
    
        def response(self, flow: mitmproxy.http.HTTPFlow):
            # 拦截包的信息
            if 'https://mbd.baidu.com/newspage/data/landingpage' in flow.request.url:
                print(flow.response.text)
                self.num = self.num + 1
                ctx.log.info("We've seen %d flows" % self.num)
    
    addons = [
        Counter()
    ]
    
    
  • 相关阅读:
    查缺补漏中~~
    The number of divisors(约数) about Humble Numbers
    Octorber 21st
    素数回文
    盐水的故事
    居然因为交换错了好几把。。。。,还有坑点是num1可以大于num2
    税收与补贴问题(洛谷1023)
    斐波拉契高精度(洛谷1255)
    高精度模板
    Codeforces#373 Div2
  • 原文地址:https://www.cnblogs.com/gqv2009/p/14518931.html
Copyright © 2020-2023  润新知