Mitmproxy 抓包工具安装使用

简介

Mitmproxy是一个使用python编写的中间人代理工具,跟Fiddle、Charles等等的抓包工具是差不多的,同样可以用于拦截、修改、保存http/https请求。比起Fiddle、Charles,mitmproxy有一个最大的特点是支持python自定义脚本。

安装

Win

官网下载windows安装包:https://mitmproxy.org/#mitmproxy

Mac

使用homebrew安装即可

代码语言:javascript

复制

brew install mitmproxy

python安装

代码语言:javascript

复制

pip install mitmproxy

证书安装

Charles一样,在使用mitmproxy之前,我们需要先安装证书 在连接mitmproxy代理之后,通过访问连接:http://mitm.it/ 来安装证书

注意:点击Show Instructions查看要求的系统版本号。

验证安装

完成后,系统将拥有 mitmproxy、mitmdump、mitmweb 三个命令,由于 mitmproxy 命令不支持在 windows 系统中运行,我们可以拿 mitmdump 测试一下安装是否成功,输入如下命令验证是否安装成功。

代码语言:javascript

复制

^Catx:~ atx$ mitmdump --version
Mitmproxy: 7.0.2
Python:    3.9.7
OpenSSL:   OpenSSL 1.1.1l  24 Aug 2021
Platform:  macOS-10.14.6-x86_64-i386-64bit

启动运行

mitmprxoy

使用如下命令来启动mitmproxy,-p表示端口号,默认是8080。为了避免端口冲突,这里改为8081

代码语言:javascript

复制

mitmproxy -p 8081

启动mitmproxy后,连接设备代理,在客户端操作后就会看到请求,如下图所示:

可以通过上下移动鼠标滚轮的切换请求,选中某一请求后单击可查看请求详情。

然后通过q命令可以返回到主界面,然后通过f命令加上要过滤的参数可以过滤请求。如下图所示就是过滤只包含info关键词的请求。

mitmweb

mitmweb启动同mitmproxy启动方式一样,与mitmproxy不同的是,mitmweb是有web页面的。例:启动mitmweb并指定监听8999端口

代码语言:javascript

复制

atx:~ atx$ sudo mitmweb -p 8999
Password:
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8999

启动后连接代理,可以在Web页面看到请求信息,如下图所示:

mitmdump

mitmdumpmitmproxy 的命令行版本,近似于 charles 的命令行版本,功能和 charles、fiddler 相似,强大之处在于它的工具 mitmdump 可以直接对接 python 对请求做处理。

mitmdumpmitmproxy 的命令行窗口,同时还可对接 python 对请求进行处理,因此就不用手动截获和分析 http 请求和响应,只需要写好请求和响应的处理逻辑即可。

录制与回放

代码语言:javascript

复制

#录制
mitmdump -w 文件名
#过滤
mitmdump -nr 文件名 -w 文件名2 "~s sutune"
#回放
mitmdump -nC 文件名

参数

  • -s 执行脚本
  • -n 不启动代理
  • -r 读取文件内容
  • -w 写入文件
  • ~s 过滤响应数据
  • ~q 过滤请求数据

mitmproxy命令不支持在 windows 系统中运行,这三个命令功能一致,且都可以加载自定义脚本,唯一的区别是交互界面的不同。

例如启动命令:

代码语言:javascript

复制

windows:mitmdump.exe -s example_script.py -p 8999
Mac:mitmdump -s example_script.py -p 8999

修改请求

假设我们想修改请求header,例如将User-Agent被修改成mitmproxy代码实现如下

代码语言:javascript

复制

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

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

  • info()方法输出的内容是白色的
  • warn()方法输出的内容是黄色的
  • error()方法输出的内容是红色的

执行脚本

代码语言:javascript

复制

sudo mitmdump -p 8999 -s script.py

运行之后我们在客户端操作可以看到如下结果:

查看请求信息

除了可以修改请求内容,还可以查看请求的信息

代码语言:javascript

复制

from mitmproxy import ctx

def request(flow):
    request = flow.request
    info = ctx.log.info
    
    # 打印请求的url
    info(request.url)
    # 打印请求方法
    info(request.method)
    # 打印host头
    info(request.host)
    # 打印请求端口
    info(str(request.port))
    # 打印所有请求头部
    info(str(request.headers))
    # 打印cookie头
    info(str(request.cookies))
    # 打印请求body数据
    info(request.get_text()) #请求中body内容,有一些http会把请求参数放在body里面,那么可通过此方法获取,返回字典类型
    #打印请求参数
    info(request._get_query())


查看响应

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

代码语言:javascript

复制

from mitmproxy import ctx

def response(flow):
    response = flow.response
    info = ctx.log.info
    
    # 打印响应码
    info(str(response.status_code))
    # 打印所有头部
    info(str(response.headers))
    # 打印cookie头部
    info(str(response.cookies))
    # 打印响应报文内容
    info(str(response.text))


这里打印输出了Responsestatus_code、headers、cookies、text这几个属性,其中最主要的text属性就是网页的源代码。

学习计划安排

在这里插入图片描述

我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!

在这里插入图片描述

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值