此篇博客只讲解如何将mitmproxy的中间人代理脚本放在服务器上运行,不会过多说明mitmproxy如何使用,有需要请自行百度,Google等
一、生成requirements.txt
文件
requirements.txt
用于记录所有依赖包及其精确的版本号。以便新环境部署。使用方法参考这篇博客
二、编写Dockerfile
文件
FROM python:3.7
MAINTAINER Jacob
ENV PATH /usr/local/bin:$PATH
ADD . /demo_mitm
WORKDIR /demo_mitm
RUN pip3 install -i https://pypi.doubanio.com/simple/ -r requirements.txt
CMD mitmdump -p 8888 -s mitm_addons.py --set block_global=false
Dockerfile 指令:
指令 | 说明 |
FROM | 指定所创建镜像的基础镜像 |
MAINTAINER | 指定维护者信息 |
ENV | 指定环境变量 |
ADD | 赋值指定的路径下的内容到容器中的路径下,可以为URL;如果为tar文件,会自动解压到路径下(注意: 上边命令中 |
WORKDIR | 配置工作目录,这里我配置的是 |
RUN | 在创建镜像时运行的命令,可写多个 |
CMD | 指定启动容器时默认执行的命令 |
注意事项
- 在启动mitmproxy时不要用
mitmproxy
,在docker中不支持会报Error: mitmproxy's console interface requires a tty. Please run mitmproxy in an interactive shell environment.
,需要用mitmdump
方式来启动 - 在
CMD
启动容器时默认执行的命令我添加了--set block_global=false
,这样做的原因是block_global
是用来设置是否阻止来自全球可访问网络的连接,这在IANA特殊目的注册表中已定义。默认值:True
,只能在内网设置代理,需要指定为False
允许外网访问
如果不添加则在手机端设置好代理后报如下错误(ip我用*号代替):
Client connection from ::ffff:*.*.*.* killed by block_global
*.*.*.*:2197: Connection killed
*.*.*.*:2197: clientdisconnect
*.*.*.*:2198: clientconnect
Client connection from ::ffff:*.*.*.* killed by block_global
*.*.*.*:2198: Connection killed
*.*.*.*:2198: clientdisconnect
*.*.*.*:2199: clientconnect
三、调整项目中的连接
如果代码中有连接数据库等操作,且填的是内网地址,需要将链接改为外网地址,如果同属一个docker内网,也可以改成docker的内网地址
四、构建镜像
构建
docker build -t demo_mitm:latest .
命名格式: 镜像名称(不能有英文大写字母):标签
PS: 如果没有标签那么可以写latest
注:在构建下载依赖包时,可能会卡在
brotlipy-0.x.0.tar.gz
很长时间,耐心等待即可
检查是否构建成功
输入 docker images
查看镜像列表是否有刚才创建的demo_mitm
镜像
五、启动镜像
输入下边的命令即可启动
docker run -d -v /opt/myapp/demo_mitm:/demo_mitm -p 8080:8888 --name demo_mitm demo_mitm
-
-d
: 容器在后台运行 -
-v
: 将宿主机目录映射到容器内,将宿主机上的代码映射到容器的工作内,这里当我修改编写好的脚本后就不需要重建构建镜像了,只需要修改在宿主机上的代码即可,如果不用后期再修改代码,则不需要映射容器内工作目录的代码还是最开始的 -
-p
: 将宿主机端口映射到容器使用的端口,容器使用的是8888端口,因为宿主机8888端口被其他项目占用了所以使用了8080来映射,如果不映射端口外网无法访问容器端口 -
--name
: 设置容器名字,我这里是设置和镜像名称保持一致 - 结尾的
demo_mitm
指定启动的镜像
结束
至此即可用手机连接wifi后设置代理为服务器的ip+端口后在服务端进行抓包