mitmproxy是一个支持HTTP和HTTPS的抓包工具,类似Fiddler、Charles的功能,只不过它通过控制台的形式操作。

mitmproxy还有2个关联组件,一个是mitmdump,一个是mitmweb

其中mitmdump可以直接对接python脚本,我们可以不用手动获取和分析http请求和响应,只需要写好请求和响应的处理逻辑写入python脚本。

1.mitmproxy的安装

最简单的方法是用pip install mitmproxy安装,安装的时候需要注意版本的问题,由于我的python是3.6.8,最新的mitmproxy版本太高了,不兼容,于是我卸载后,重新安装了mitmproxy的5.0.0。

pip install mitmproxy==5.0.0 --timeout 100 --user

1.1 Linux下的安装

检查是否安装成功

在这里插入图片描述

1.2 windows下安装

安装后提示需要路径加环境变量

C:\Users\Administrator\AppData\Roaming\Python\Python36\Scripts将这个路径添加到环境变量

检查是否安装成功

windows下面是不支持mitmproxy的,但是安装mitmproxy的时候回同时安装3个库,分别是:mitmproxy、mitmdump、mitmweb。

这里我们检查一下mitmdump版本,如果有显示,说明安装成功了

mitmdump --version
在这里插入图片描述

2.chrome浏览器代理的设置

需要安装一个chrome的插件SwitchyOmega,这是一个代理插件,在chrome的应用商店安装。

2.1 SwitchyOmega插件的下载

打开chrome应用商城,将switchyomega添加到扩展程序。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 switchyomega的使用

选项这里进行配置,新建一个情景模式,填写好代理服务器的信息。也就是之后浏览器的流量会经过代理服务器,这样,在代理服务器上安装mitmproxy就可以抓取浏览器上的请求和返回包了。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.Linux环境使用mitmproxy

3.1 安装https证书

直接在终端输入mitmproxy回车,就开始监听了。

这时候在浏览器访问页面,mitmproxy就开始抓包了。

但是这时候如果访问HTTPS页面,浏览器访问页面会失败。我们需要下载并安装HTTPS证书。

我们在浏览器所在的机器上用浏览器打开mitm.it,因为mitmproxy是安装在linux下的,这里选择other。
在这里插入图片描述

3.2 mitmproxy的使用

3.2.1 运行mitmproxy

安装好之后在linux下输入mitmproxy,开始运行mitmproxy。

在这里插入图片描述

默认的监听端口是8080,这个端口可以自己修改,方法是运行的时候输入端口号,比如:

mitmproxy -p 8899

在这里插入图片描述

浏览器的代理需要正确设置,ip和端口不要设置错,参考2.2。

然后再浏览器输入https://www.baidu.com,回车。就可以抓取数据包了。

在这里插入图片描述

mitmproxy常用操作:

回车/鼠标点击:查看数据包详情

q:返回上一层/退出mitmproxy

z:清空包

f:过滤数据包

i:设置断点

3.2.1 过滤数据包

输入f,这里出现一个命令,set view-filter,然后输入过滤条件

在这里插入图片描述

常见的过滤条件:

(1)过滤出返回不是200的包

!(~c 200)

(2)清除过滤条件

再输入f,然后删除条件

(3)域名过滤

过滤出域名是baidu.com的数据包

~d baidu.com

(4)组合条件的过滤

请求方式是post,url包含baidu

~m post & -u baidu

3.2.2 设置断点

输入i,出现命令set intercept ’ ',就可以输入拦截的条件了

在这里插入图片描述

拦截域名是baidu.com的请求方式是get的数据包

~d baidu.com & ~m get

在这里插入图片描述

点击这个数据包,进入下面界面

在这里插入图片描述

(1)设置request断点

点击Request intercepted,然后按下“e”键

在这里插入图片描述

这时候可以通过上下方向键选择需要修改的部分,这里我选择了request-headers,然后再HOST的那一行输入“d”键,删除了一整行。

在这里插入图片描述

按q退出上一个界面,然后按下“e”键,选择url

在这里插入图片描述

按下i进行编辑,然后esc :wq保存退出,这是现在的数据包请求

在这里插入图片描述

然后按下“a”键进行重新访问,访问的网页就变成新的url网页了

(2)设置response断点

选中response

在这里插入图片描述

按“e”键,选中修改的项,这里我选response-body

在这里插入图片描述

然后输入返回的body,保存退出

在这里插入图片描述

看到这里确实被修改了

在这里插入图片描述

然后按q退出到数据包界面,再按a重新加载,网页出现一样的返回body了

在这里插入图片描述

4.windows环境使用mitmdump

4.1 安装https证书

同3.1,只是下载的时候需要下载windows的版本。

4.2mitmdump的使用

4.2.1 运行mitmdump

打开cmd命令,输入mitmdump,开始监听。

在这里插入图片描述

mitmdump的端口号默认是8080,可以自己进行修改

mitmdump -p 新的端口号

在这里插入图片描述

4.2.2 获取的数据保存到文件中

浏览器的代理需要正确设置,参考2.2。

浏览器中输入https://www.baidu.com,回车

抓取到了数据包如下。
在这里插入图片描述

这样看不方便,可以给这些信息输入到一个文件。

mitmdump -w test.txt

在这里插入图片描述

4.2.3 mitmdump和python进行交互

命令行输入:mitmdump -p 端口 -s python文件(这个文件需要按照一定的格式来写)

(1)修改请求头的User-Agent

def request(flow):
    flow.request.headers['User-Agent'] = 'MitmProxy'
    print(flow.request.headers)

这里定义了一个request方法,参数是flow,它是一个HTTPFlow对象,通过request属性可以获取到当前请求对象。然后打印输出了请求的请求头,将请求头的User-Agent修改成了MitmProxy。

注意:python文件放在这个路径下,并且执行的时候需要cmd也先定位到这个路径下

在这里插入图片描述

然后浏览器输入一个网址,回车

可以看到输出的headers中User-Agent已经改变了。

在这里插入图片描述

(2)日志输出

这里调用模块ctx,它有一个log功能,调用不同的输出方法就可以输出不同的颜色结果,以方便我们做调试。

使用ctx进行log输出info,warn,error。显示为不同的颜色。

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

在这里插入图片描述

(3)Request

除了上面的headers,还可以获取Request的其他属性:URL,Host,method,path,scheme,cookies等等。

def request(flow):
    warn = ctx.log.warn
    warn(str(flow.request.host))
    warn(str(flow.request.url))
    warn(str(flow.request.path))
    warn(str(flow.request.method))

在这里插入图片描述

还可以修改请求的属性,这里修改url

def request(flow):
    url = 'https://httpbin.org/get'
    flow.request.url = url

可以看到页面上显示的url还是百度的,可是实际的返回页面已经变了。

在这里插入图片描述

(4)响应

mitmdump提供了对应的处理接口,response()方法。

这里访问https://httpbin.org/get,输出返回的http返回码、页面的源代码

def response(flow):
    warn = ctx.log.warn
    warn(str(flow.response.status_code))
    warn(str(flow.response.text))

在这里插入图片描述

4.2.4 退出mitmdump

按下ctrl+c,退出mitmdump

5. windows环境使用mitmweb

设置好浏览器的代理,参考2.2。

然后在命令行输入mitmweb,会自动加载出一个页面,可以方便观察查看数据包。

在浏览器输入一个网址,网页上就可以方便观察数据包了。

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐