在docker中部署mitmproxy并执行脚本
此篇博客只讲解如何将mitmproxy的中间人代理脚本放在服务器上运行,不会过多说明mitmproxy如何使用,有需要请自行百度,Google等
一、生成requirements.txt文件
requirements.txt用于记录所有依赖包及其精确的版本号。以便新环境部署。使用方法参考这篇博客
二、编写Dockerfile文件
1 | FROM python:3.7 |
Dockerfile 指令:
| 指令 | 说明 |
|---|---|
| FROM | 指定所创建镜像的基础镜像 |
| MAINTAINER | 指定维护者信息 |
| ENV | 指定环境变量 |
| ADD | 赋值指定的.和/demo_mitm之间有空格,其中.表示宿主机的当前目录,即当前脚本所在目录,/demo_mitm表示docker容器目录,合起来的意思就是将宿主机当前目录下的文件拷贝至docker容器的/demo_mitm目录,文件夹不存在会自动创建) |
| WORKDIR | 配置工作目录,这里我配置的是/demo_mitm,即在上边通过ADD指令添加的目录下 |
| 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我用*号代替):1
2
3
4
5
6
7
8Client 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的内网地址
四、构建镜像
构建
1 | docker build -t demo_mitm:latest . |
命名格式: 镜像名称(不能有英文大写字母):标签
PS: 如果没有标签那么可以写latest
注:在构建下载依赖包时,可能会卡在
brotlipy-0.x.0.tar.gz很长时间,耐心等待即可
检查是否构建成功
输入 docker images 查看镜像列表是否有刚才创建的demo_mitm镜像
五、启动镜像
输入下边的命令即可启动
1 | 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+端口后在服务端进行抓包
作者: 只是学习学习
邮箱: fengzxia1000@163.com
原文地址: https://fengzxia.gitee.io/posts/9d815f7c.html
版权声明: 商业转载请联系作者获得授权,非商业转载请注明出处。