python抓包代理库mitmproxy

676 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

python中一个库mitmproxy,可以实现抓包;实现的就是代理的功能;相对于其他软件,优势在于可以编码;

更细一点的说明如下:

mitmproxy是一个抓包工具,类似于WireShark、Filddler,并且它支持抓取HTTP和HTTPS协议的数据包,只不过它是一个控制台的形式操作。另外,它还有两个非常有用的组件,一个mitmdump,它是mitmproxy的命令行接口,利用它可以对接python脚本;另一个是mitmweb,它是一个web程序,通过它可以清楚的观察mitmproxy捕获的数据情况,优点类似于Chrome浏览器。

安装库:

pip install mitmproxy
完成后,系统将拥有 mitmproxy、mitmdump、mitmweb 三个命令,
测试一下安装是否成功,执行:
mitmproxy --version

官方文档:在这里

安装证书:

执行mitmproxy命令后,会在用户目录下生成证书; C:\Users\Administrator.mitmproxy

在这里插入图片描述 点击证书,直接安装;

设置网络代理:

若要抓包,必须设置网络代理;

以下已win10系统为例:

首先进入电脑系统后,点击“开始-设置”。进入开始-设置后,点击“网络Internet”。进入网络Internet后,点击“代理”。 在这里插入图片描述 进入代理后,找到手动设置代理,开启“使用代理服务器”。开启代理服务器后,填写相应“参数”,点击“保存”。

在这里插入图片描述

mitmproxy的默认地址是http://127.0.0.1:8080;

开始抓包

  • mitmproxy 在这里插入图片描述

  • mitmweb 输入命令,打开web页面: 在这里插入图片描述

  • 编码方式mitmdump

from mitmproxy import http
#将请求新增了一个查询参数
def request(flow: http.HTTPFlow):
    flow.request.query["mitmproxy"] = '8.0'

#将响应头中新增了一个自定义头字段
def response(flow: http.HTTPFlow):
  flow.response.headers["mitm"] = 'foo'
  #print(flow.response.text)

保存以上文件为demo.py

然后执行命令:

mitmdump -s demo.py

接口实现接口拦截修改;当然也可以实现抓包了