docker mitmproxy

启动容器

# 测试
docker run --rm -it -p 8080:8080 -p 0.0.0.0:8081:8081 mitmproxy/mitmproxy mitmweb --web-host 0.0.0.0
# web界面
docker run -d -it --name mitmproxy -p 9990:8080 -p 0.0.0.0:9991:8081 mitmproxy/mitmproxy mitmweb --web-host 0.0.0.0 --set block_global=false

查看token

docker logs -f mitmproxy

其它

### 8080是代理端口
### 8081是WEB管理端口 http://host_ip:8081
### --set block_global=false 允许公网代理
### 证书下载网址,需要代理后访问
# http://mitm.it/

### 停止mitmproxy容器
docker stop mitmproxy
### 删除mitmproxy容器
docker rm mitmproxy
### 进入mitmproxy容器
docker exec -it mitmproxy sh

启动方式

mitmweb:提供了一个 web 页面,交互界面可以通过 localhost:8081 去访问。
mitmproxy:提供命令行界面,可以通过命令过滤请求。
mitmdump:可以通过执行一个 python 脚本去运行
# 命令行界面
mitmproxy -p 8888
# 保存到文件
mitmdump -p 8888 -s script.py
# 将截获的数据保存到文件中
mitmdump -w outfile.txt
# 浏览器界面
mitmweb -p 8888
cat >script.py <<'EOF'
import json
import re
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))  # 红色日志

    request = flow.request
    info = ctx.log.info
    info(request.url)
    info(str(request.headers))
    info(str(request.cookies))
    info(request.host)
    info(request.method)
    info(str(request.port))
    info(request.scheme)
    
    # 可以更改请求的 url
    url = 'https://httpbin.org/get'
    flow.request.url = url

def response(flow):
    # 提取请求的 url 地址
    request_url = flow.request.url
    print('请求到的地址为 =====> %s' % request_url)

    # 通过 jd 字符串,过滤出 京东 App 的请求和返回数据
    if bool(re.search(r'jd', request_url)):
        response_body = flow.response.text
        print('返回体为 ====> %s' % response_body)

        data = json.loads(response_body)
        print('json 格式的数据为 =====> ' % data)
        ware_infos = data.get('wareInfo')
        goods_info = {}

        if ware_infos is not None:
            for ware_info in ware_infos:
                goods_info["wareId"] = ware_info.get("wareId")
                goods_info["wname"] = ware_info.get("wname")
                goods_info["jdPrice"] = ware_info.get("jdPrice")
                goods_info["goodrate"] = ware_info.get("good")
                goods_info["reviews"] = ware_info.get("reviews")
                goods_info["shopId"] = ware_info.get("shopId")
                goods_info["ShopName"] = ware_info.get("goodShop").get("goodShopName")
                print(goods_info)
EOF
posted @ 2021-05-08 09:32  chenzechao  阅读(692)  评论(0)    收藏  举报