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()
]

原文地址:https://www.cnblogs.com/gqv2009/p/14518931.html