Docker布置mitmproxy镜像使用Python脚本拦截请求
mitmproxy 就是用于 MITM 的 proxy,MITM 即中间人攻击(Man-in-the-middle attack)。用于中间人攻击的代理首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为。本文教会读者如何用Docker搭建一个mitmproxy服务。
一、官方镜像及启动命令
docker pull mitmproxy/mitmproxy
1、挂载证书启动
docker run --rm -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy -p 8080:8080 mitmproxy/mitmproxy
2、mitmdump加载脚本
-v 将本地文件挂载到docker里面
docker run --rm -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy -v /mitm_proxy/:/usr/mitm_proxy -p 8899:8899 mitmproxy/mitmproxy mitmdump -p 8899 -s /usr/mitm_proxy/proxy.py
3、mitmweb
docker run --rm -it -p 8080:8080 -p 127.0.0.1:8081:8081 mitmproxy/mitmproxy mitmweb --web-host 0.0.0.0
二、定制自己的Docker
1、创建Dockerfile
创建自己的Docker的好处就是可以定制化下载各种各样的包
FROM mitmproxy/mitmproxy
ADD ./mitm_proxy /mitm_proxy
WORKDIR /mitm_proxy
RUN pip install PyMySQL
指令 | 说明 |
---|---|
FROM | 指定所创建镜像的基础镜像 |
ADD | 赋值指定的路径下的内容到容器中的路径下,可以为URL;如果为tar文件,会自动解压到路径下(注意: 上边命令中.和/demo_mitm之间有空格,其中.表示宿主机的当前目录,即当前脚本所在目录,/demo_mitm表示docker容器目录,合起来的意思就是将宿主机当前目录下的文件拷贝至docker容器的/demo_mitm目录,文件夹不存在会自动创建) |
WORKDIR | 配置工作目录,这里我配置的是/demo_mitm,即在上边通过ADD指令添加的目录下 |
RUN | 在创建镜像时运行的命令,可写多个 |
2、Build
docker build -t demo_mitm:latest .
使用docker images,查看镜像
3、启动
docker run -i -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy -v /data1/mitm_proxy/:/usr/mitm_proxy -p 8899:8899 demo_mitm mitmdump -p 8899 -s /usr/mitm_proxy/proxy.py
4、后台启动
docker run -i -d -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy -v /data1/mitm_proxy/:/usr/mitm_proxy -p 8899:8899 demo_mitm mitmdump -p 8899 -s /usr/mitm_proxy/proxy.py
5、docker run参数
docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container
-a, --attach=[] Attach to stdin, stdout or stderr.
-c, --cpu-shares=0 # 设置 cpu 使用权重 --cap-add=[] Add Linux capabilities
--cap-drop=[] Drop Linux capabilities
--cidfile="" # 把容器 id 写入到指定文件
--cpuset="" # cpu 绑定 -d, --detach=false Detached mode: Run container in the background, print new container id # 后台运行容器
--device=[] Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc)
--dns=[] # 设置 dns
--dns-search=[] # 设置 dns 域搜索
-e, --env=[] # 定义环境变量
--entrypoint="" Overwrite the default entrypoint of the image # ?
--env-file=[] # 从指定文件读取变量值
--expose=[] # 指定对外提供服务端口
-h, --hostname="" # 设置容器主机名
-i, --interactive=false # 保持标准输出开启即使没有 attached
--link=[] # 添加链接到另外一个容器
--lxc-conf=[] (lxc exec-driver only) Add custom lxc options
--lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
-m, --memory="" # 内存限制
--name="" # 设置容器名
--net="bridge" # 设置容器网络模式 'bridge': creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:<name|id>': reuses another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure.
-P, --publish-all=false # 自动映射容器对外提供服务的端口
-p, --publish=[] # 指定端口映射 format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort (use 'docker port' to see the actual mapping)
--privileged=false # 提供更多的权限给容器
--restart="" Restart policy to apply when a container exits (no, on-failure[:max-retry], always)
--rm=false # 如果容器退出自动移除和 -d 选项冲突 --security-opt=[] Security Options
--sig-proxy=true Proxify received signals to the process (even in non-tty mode). SIGCHLD is not proxied.
-t, --tty=false # 分配伪终端
-u, --user="" # 指定运行容器的用户 uid 或者用户名
-v, --volume=[] # 挂载卷
--volumes-from=[] # 从指定容器挂载卷
-w, --workdir="" # 指定容器工作目录
console.log("公众号:虫术")
Blog:http://404nofoundx.top/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步