一、安装

1.1 安装mitmproxy

直接使用pip安装即可

pip install mitmproxy

pip本质上会一是安装mitmproxy库的相关代码,二是安装mitmproxy.exe/mitmdump.exe/mitmdump.exe三个可执行程序。

可执行程序被安装在$PYTHON_HOME/Scripts文件夹下,如果是conda版本的python那可以用以下命令来查看当前使用的是哪个环境。

conda env list

1.2 安装证书

和burpsuite类似mitmproxy默认只能拦截http,想要拦截https那就需要安装证书。

首先到$PYTHON_HOME/Scripts目录下运行一下mitmdump,完成之后在用户家目录下的.mitmproxy文件夹下即会生成证书,传到手机点击安装即可。

mitmproxy-ca.p12----PKCS12格式证书私钥

mitmproxy-ca.pem----PEM格式证书私钥

mitmproxy-ca-cert.cer----PEM格式证书,与mitmproxy-ca-cert.pem相同只是改变了后辍,适用于部分Android

mitmproxy-ca-cert.p12----PKCS12格式证书,适用于Windows

mitmproxy-ca-cert.pem----PEM格式证书,适用于大多数非Windows平台

mitmproxy-dhparam.pem----PEM格式秘钥文件,用于增强SSL安全性

Windows安装证书:双击mitmproxy-ca-cert.p12----全部默认直接点“下一步”直到安装完成。

Android安装证书:把mitmproxy-ca-cert.cer通过usb复制到手机上----点击使用证书安装器安装证书(通过qq发送到手机上时提示无法读取证书不懂什么原因)

二、网络代理配置

2.1 确保手机和电脑处于同一局域网

运行mitmproxy的电脑和运行目标app的手机要同处一个局域网才能进行代理。

如果是有笔记本那么笔记本和手机同连到一个路由器上,或者在笔记本上开启一个wifi然后用手机连上去,或者用Genymotion等模拟器运行app在模拟器设置代理,这三个方法都可以。

但如果是没有无线网卡的台式机那似乎只能使用模拟器,要用其他两种方法那得外接一个usb式无线网卡。

我这里用的方法是台式机外接无线网卡使用360开启一个wifi手机连上去,台式机ip为172.30.195.1手机ip为172.30.195.2。

2.2 电脑启动代理

我这里是windows,mitmproxy.exe并不支持windows,但这并没有很大关系,mitmproxy.exe本质就是一个窗口式的burpsuite的proxy+repeater。

如果要拦包改包我们用burpsuite更加好,用mitmproxy的意义在于代码能获取数据包,而这个功能是由mitmdump实现只要mitmdump.exe可运行即可。

和1.2一样启动mitmdump.exe

mitmdump.exe

2.3 手机配置代理

手机配置代理大同小异都在设置之中进行配置。比如我这里的路径是:

设置----无线和网络WLAN----长按wifi名----修改网络----显示高级选项----代理----手动---服务器主机名输入172.30.195.1(根据自己电脑ip修改)服务器端口输入8080----保存

2.4 代理效果查看

完成后在启动mitmdump.exe的代理窗口上即可看到手机发送的所有数据包。

三、Python3使用mitmproxy

我们前边2.2也提到使用mitmproxy的根本目的是想要python能修改发送的数据包,及截获服务端返回的数据包。只是像2.4那样打印出所有发送的请求对我们的目的而言是没有什么用的。

python接触发送数据包的途径是在启动mitmdump启动时使用-s选项指定处理脚本,其中通过重写request方法处理请求数据包,通过重写response方法处理响应数据包。示例如下。

启动命令:

mitmdump.exe -s example_script.py

exampl_script.py内容:

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)) # 所有服务器响应的数据包都会被这个方法处理
# 所谓的处理,我们这里只是打印一下一些项
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))

如图箭头所指处正是经request方法处理,依次输出请求url、请求方法、host头、请求端口、所有头部及cookies

四、评述

我们在电脑上写爬虫,关键操作是找到请求url、制定请求数据包、解析返回结果。

从这个角度出发对app我们根本需要的似乎其实只是拦截请求数据包和响应数据包、分析他们的格式,没必要从app发出和接收数据包。

也就是似乎用burpsuite代理并进行数据包分析就完了,mitmproxy没什么用(?)。

参考:

崔庆才----《Python3网络爬虫开发实战》

Python3+mitmproxy安装使用教程(Windows)的更多相关文章

  1. Python3+mitmproxy安装使用教程(Windows)(转载)

    mitmproxy 是用于MITM的proxy,MITM中间人攻击.说白了就是服务器和客户机中间通讯多增加了一层.跟Fiddler和Charles最大的不同就是,mitmproxy可以进行二次开发,尤 ...

  2. Caffe+VS2015+python3的安装(基于windows)

    在网上找了许多安装Caffe的教程 感觉全都是杂乱无章的 而且也没有详细的 只能自己当小白鼠来实验一次了 本次配置:CUDA 8.0+ CUDNN  +VS 2015 +Python 3.5 + Ca ...

  3. 2018超详细sublime text3+python3.x安装配置教程(附常用插件安装教程)

    导读 本文是关于2018年7月最新版sublime text3+pythin3.x下载及安装配置教程,sublime text3版本为3176,python版本为3.7,安装环境是基于windows1 ...

  4. Python3+Flask安装使用教程

    一.环境配置 当前我的开发环境是Miniconda3+PyCharm.开发环境其实无所谓,自己使用Python3+Nodepad都可以.安装Flask库: pip install Flask 二.第一 ...

  5. Python3+Appium安装使用教程

    一.安装 我们知道selenium是桌面浏览器自动化操作工具(Web Browser Automation) appium是继承selenium自动化思想旨在使手机app操作也能自动化的工具(Mobi ...

  6. mysql的下载和安装详细教程(windows)

    Windows下安装MySQL详细教程 1.安装包下载    2.安装教程 (1)配置环境变量 (2)生成data文件 (3)安装MySQL (4)启动服务 (5)登录MySQL (6)查询用户密码 ...

  7. MySQL下载安装详情教程(Windows)

    1.下载MySQL数据库可以访问官方网站:https://www.mysql.com/ 2.点击DOWNLOADS模块下的Community模块下的MySQL Community Server进行下载 ...

  8. Python3+Scapy安装使用教程

    一.说明 之前写DoS程序的时候(见"拒绝服务(DoS)理解.防御与实现"),数据包完全是自己构造的,这其中的难处一是要清楚各层协议的字段.字段长度.字段是数值还是字符.大头还是小 ...

  9. Python3+slowloris安装使用教程

    一.说明 今天提到slowloris,这东西看着很眼熟,应该是以前局方打算用来刷竞赛积分的工具.我总觉得DoS没什么意思,但记不得怎么用了所以还是研究一下. 二.安装 slowloris就是一个pyt ...

随机推荐

  1. 六种方式读取properties资源文件

    conf.properties文件内容: reportStationName=xx供电局 JBM=0318 文件路径: 其中xxx为项目名 import java.io.BufferedInputSt ...

  2. Python学习之高级数组(一)

    1.Python基础学习之高级数组(一) 1.1视图:就是与较大数组共享相同数据的较小数组.Numpy包提供数据视图的概念是为了精确地控制内存的使用方式.  数组视图.切片视图.转置和重塑视图等 数组 ...

  3. 关于table的td和ul元素li隔行变色的功能实现

    table元素的td和ul元素li隔行变色的功能实现 利用css控制二者的样式轻松实现隔行换色: 例如:table的css样式控制: table tr td{   background-color:颜 ...

  4. 20190404用户及用户组管理(week1_day4)

    useradd userdel usermod groupadd groupdel 用户管理 为什么需要有用户? 1. linux是一个多用户系统 2. 权限管理(权限最小化) 用户:存在的目录是为了 ...

  5. SpringBoot使用HttpClient远程调用

    一. Get请求 try { //拼接url url = url+"access_token="+token+"&department_id=1&fetc ...

  6. systemd 服务介绍

    CentOS7自定义系统服务 CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统 ...

  7. Python3 批量替换文本内容

    Python3 批量替换文本内容 示例: # coding:utf8 import os; def reset(): i = 0 path = r"H:\asDemo\workdemo\aw ...

  8. Linux NFS挂载

    Linux NFS挂载 一.NFS挂载 192.25.10.101/home/sharedata/azkaban/ODS_HS08 挂载到 192.25.10.102/home/data_azkaba ...

  9. @Transacitonal注解不生效之spring中expose-proxy的作用与原理

    几年前记得整理过,@Transacitonal注解的方法被另外一个方法调用的时候,事务是不生效的. 如果大量代码已经这么写了,这个时候抽取出去不现实,怎么办呢? 答案就是在<aop:aspect ...

  10. angular7 DOM操作 及 @ViewChild

    一.Angular 中的 dom 操作(原生 js) 二.Angular 中的 dom 操作(ViewChild) 三.父子组件中通过 ViewChild 调用子组件 的方法 1.调用子组件给子组件定 ...