mitmproxy:安装配置

mitmproxy是一个支持HTTP和HTTPS,并带有控制台的抓包工具。

安装

mac下使用brew安装mitmproxy,会同时安装mitmdump和mitmweb两个组件。mitmdump是mitmporxy的命令行版本,mitmweb是一个基于web的mitmproxy接口。

1
brew install mitmproxy

终端启动mitmproxy以生成CA证书

1
mitmproxy -p 8888   # ctrl+c关闭,默认端口是8080,可以使用-p指定端口

生成的证书放在根目录下的隐藏文件.mitmproxy

配置

电脑配置证书:

进入.mitmproxy文件夹,将mitmproxy-ca-cert.pem拉到钥匙串访问中,点击选择“始终信任”

手机配置证书:

1、查看电脑的ip

1
ifconfig en0 | grep inet

2、设置手机http代理,修改服务器和端口(没有指定则为默认端口8080)

3、在手机浏览器中输入mitm.it,选择对应的证书进行安装、认证

这样就基本配置完成了,整个过程跟charles的配置是类似的,接下来就能在终端监听手机端的数据了。

使用

对于数据抓取来说,可以通过charles、fiddler等抓包工具先找到数据接口,再通过mitmproxy来获取数据。

mitmdump可以运行脚本:

1
mitmdump -p 8888 -s script.py

脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding:utf-8 -*-
# Time: 2018/6/8 15:40

from mitmproxy import ctx
import json
import csv

columns = ['title', 'author', 'cover', 'summary', 'price']
file = open('books.csv', 'w', newline='', encoding='utf-8')
writer = csv.DictWriter(file, columns)
writer.writeheader()

def response(flow):
global writer
url = "https://dedao.igetget.com/v3//discover/bookList"
if flow.request.url.startswith(url):
text = flow.response.text
data = json.loads(text)
books = data.get('c').get('list')
for book in books:
data = {
'title': book.get('operating_title'),
'author': book.get('book_author'),
'cover': book.get('cover'),
'summary': book.get('other_share_summary'),
'price': book.get('price')
}
writer.writerow(data)
ctx.log.info(str(data))

这里有两点需要注意的:

  • mitmproxy需要python3.6及以上才能运行
  • 例子来自崔庆才的《python3网络爬虫开发实战》,原例是将数据保存到mongodb,但是一直有错误,暂时还没解决

参考文章:

mitmproxy