一、背景
mitmproxy 可以当作抓包工具也可以当作是代理,其具体能力如下:
(1) 支持SSL/TLS的HTTP/1、HTTP/2、WebSockets 请求拦截 ;
(2) 对拦截的 HTTP 请求支持修改(使用python脚本接入 mitmproxy API);
(3) 保存 HTTP 对话以供以后重播和分析;
(4) 重播 HTTP 客户端和服务器
二、知识
官网(https://www.mitmproxy.org)提供的包,包含3个工具:
1、mitmproxy
提供一个交互式的界面,可以看到拦截的请求等,在交互式界面中可以输入各种 command 进行操作;
2、mitmweb
提供一个 web 的界面,可以看到拦截的请求等,在界面上可以对拦截的请求进行数据分析;
3、mitmdump
提供一个命令行的界面进行操作,类似于 tcpdump for HTTP;
三、安装
1、下载 (https://mitmproxy.org/)
这里点击 "More Downloads",可以看到更多版本,本次案例中 下载 mitmproxy-5.3.0-linux.tar.gz。
2、安装
mitmproxy-5.3.0-linux.tar.gz 压缩包中的目录结构:
可以看到其中含有 3 个工具文件。
mkdir mitmproxy tar -zxvf mitmproxy-5.3.0-linux.tar.gz -C mitmproxy # mitmproxy 获取 version_info=`${curr_dir}/../tool/mitmproxy/mitmproxy --version |grep Mitmproxy` |
其中 : mitmproxy --version |grep Mitmproxy 是为了校验 mitmproxy 在服务器环境中能否正确执行。
正确执行结果:
由于 mitmproxy 使用 python 开发,其不支持跨平台,环境中必须安装支持 python 成功运行的相关软件,所以通过该命令,可以校验环境是否OK。
若环境不 OK,执行该命令的时候会报错,具体可以看 第四章节的 (1) 小点。
3、效果
(1) mitmproxy
./mitmproxy -p 8040 |
说明: -p 可以指定 mitmproxy 运行端口,默认是 8001
开启另一个控制台界面,输入:curl --proxy x.x.x.x:8040 http://x.x.x.x:8068/v1/catalog/services (其中 x.x.x.x 为 安装 mitmproxy 软件的服务器)
从上图中可以看到 mitmproxy 已经拦截到了请求
(2) mitmdump
启动命令:
./mitmdump -p 8040 |
开启另一个控制台界面,输入:curl --proxy x.x.x.x:8040 http://x.x.x.x:8068/v1/catalog/services (其中 x.x.x.x 为 安装 mitmproxy 软件的服务器)
上图说明 mitmdump 拦截到了请求
(3) mitmweb
启动命令
./mitmweb -p 8040 |
开启另一个控制台界面,输入:curl --proxy x.x.x.x:8040 http://x.x.x.x:8068/v1/catalog/services (其中 x.x.x.x 为 安装 mitmproxy 软件的服务器)
从上图可以看出:
http://127.0.0.1:8001 是 web 访问的地址。目前遇到的问题,由于安装 mitmproxy 的 服务器是 无界面的 linux 虚拟机,因此在windows 服务上直接使用 http://x.x.x.x:8081 访问未成功,但是在 虚拟机上通过图中的IP是可以访问成功的。
四、遇到的问题
(1) 环境中没有 GLIBC_2.18
解决办法:
安装 GLIBC_2.18
a) 下载
http://mirror.hust.edu.cn/gnu/glibc/
b) 安装
#解压压缩包 tar -zxvf glibc-2.18.tar.gz #切换到 glibc目录 cd glibc-2.18 #创建 build 目录,用于存储编译后的文件,这里判断若存在 build 目录,则 先删后新建 #编译 # 安装 # 检查 glibc 是否安装成功 |
c) 查看系统中 gclib 的安装情况
第一种方式:
ll /lib64/ |grep libc |
结果如下:
第二种方式:
strings /lib64/libc.so.6 |grep GLIBC_ |
上图展示了已安装的 GCLIB 各种版本