安装mitmproxy实现流量分析

简介

mitmproxy 它是一个python实现的代理库,可以实现流量的拦截,注入,修改,重放等。
提供操作流量的api,很容易实现自定义的需求。

https://github.com/mitmproxy/mitmproxy

安装

前提有python环境,安装了pip

pip install mitmproxy

配置

第一次会运行mitmdump会在~/.mitmproxy/下生成根证书文件。
要把这个根证书文件放在你要流量分析设备的信任根证书列表中。

windows 导入根证书

  • 选择mitmproxy-ca-cert.cer,点安装证书
  • 进入证书导入向导,点下一步
  • 证书存储:选第二项将所有的证书放入下列存储中
  • 在选择证书存储位置的对话框,选受信任的根证书颁发机构。
  • 完成证书导入向导
  • 会有一个安全性警告,选是。(注意:导入未知根证书会有安全风险)

firefox 导入根证书

  • 选options>Advanced>Certificates>View Certificates
  • 会看到Certificate Manager,选Authoritees,点import
  • 选择mitmproxy-ca-cert.cer
  • 会出现对话框Downloading Certificate,勾选Trust this CA to identify websites.点OK

iphone 导入根证书

  • 在电脑mitmproxy-ca-cert.cer所在目录建一个http服务如用python:python -m SimpleHTTPServer,目地是局域网内的别的机器可以访问这个证书文件
  • 打开Safari,输入证书文件地址
  • 会进入安装描述文件,点安装

使用

基本使用

以看iphone的http/https流量为例
在电脑上运行mitmdump -b 0.0.0.0 -p 8889
在手机上调整手机的代理为电脑ip 加上面的端口
然后就可以看到窗口显示手机上的发出了哪些http/https流量

高级使用

在电脑上运行mitmdump -b 0.0.0.0 -p 8889 -s xxx.py
xxx.py可写自定义操作数据的代码。
详细的见项目页中的例子
https://github.com/mitmproxy/mitmproxy/tree/14b33dca5d19afc2427499e25aee8b7439b4b485/examples

安装时可能会遇到的问题

https不支持

出现

1
SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not a vailable on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures.

解决方案
pip install pyOpenSSL

安装pydivert时卡住

可能是因为国内网络环境问题
自备代理
在安装前执行set HTTPS_PROXY=http://127.0.0.1:1080

pydivert安装出错

1
2
3
4
error: [Errno 2] No such file or directory: 'build\\bdist.win-amd64\\wheel\\.\\WinDivert-1.1.7-WDDK\\amd64\\WinDivert.dll'

----------------------------------------
Failed building wheel for pydivert

在为c++库没的安装,见
https://stackoverflow.com/questions/38320033/python-2-7-pip-failed-building-wheel-for
要安装VCForPython27.msi

python2.x与python3.x的问题

出现

1
2
Error: mitmproxy requires Python 3.5 or above
Starting with version 1.0 released in 12/2016, mitmproxy no longer supports Python 2.

不想改电脑环境的可以使用低版本的mitmproxy pip install "mitmproxy==0.18.2"