你好,我是悦创。

这节课我将给同学们讲解 Mitmproxy 抓包工具的安装及介绍,上一章我给大家讲解了 Fiddler 抓包工具的安装以及简单操作,通过 Fiddler 抓包工具我们可以抓取 Web 端和 App 端的数据,今天给大家介绍另一款强大的抓包工具同样可以抓取 Web 端和 App 端的数据,并且可以和 Python 语言融合在一起,通过爬虫来抓取数据——Mitmproxy 。

1. 前言

Mitmproxy 其实就是用来做中间人攻击的,那什么是中间人工具呢?

  • Mitmproxy 就是用于 MITM 的 Proxy
  • MITM 即中间人攻击(Man-in-the-middle attack)

图一

其实,上面这张图(图一)和我们上节课讲的 Fiddler 那张图很像,我们的 Mitmproxy 就和 Fiddler 一样,在上图的 Man in the Middle 位置一样,在中间做一些截取和查看,用于中间人代理其实和正常的一样,会将我们客户端发起的请求截取,然后转发给我们的服务器(不过是多了一个中间人,这个中间人可以修该或者不修改你发起请求的数据),服务器收到请求之后会收到响应,同样我们的 Mitmproxy 会截获这个响应,最后再转发给我们的 Client 。所以总结下来就是以下三点:

  1. 和正常的代理一样转发请求,保障服务端与客户端之间的通信;
  2. 会适时的查询记录也就是:
  • 拦截请求
  • 修改请求(其实,也就是修改请求内容,比如你百度查询:Python,然后中间人修改你请求的内容,比如修改成:AI悦创,这样返回的内容就不是 Python 相关了。)
  • 返回请求
  • 修改返回(其实,也就是修改返回内容,比如你百度查询:Python,百度原本给你返回 Python 相关的内容,但中间人比如就改成一句:你好,我是悦创。这样结果就被改变了)
  1. 可以载入自定义 Python 脚本。

Mitmproxy 不同于 Fiddler 之类的抓包工具,不仅可以截获数据并且可以帮助开发者查看分析等操作,更可以自定义脚本来进行二次开发,举个例子来讲:利用 Fiddler 可以过滤出浏览器对某个特定 URL 的请求,并且查看和分析数据,但是,实现不了高度的定制化需求。例如:截获对该浏览器的请求,将返回数据为空并将真实的返回数据存到某一个数据库中或者出现异常的时候发出邮件通知。

上面所说的功能 Fiddler 实现不了,但对于 Mitmproxy 来说,可以使用载入自定义的 Python 脚本来实现,Mitmproxy 并不会对无辜的人发起攻击,由于我们的 Mitmproxy 工作在 HTTP 中,而当前通过 HTTPS 的普及,使客户端拥有检测规避中间人的能力,所以要让我们 Mitmproxy 正常工作的话必须让我们客户端或者 App 信任 Mitmproxy 的 SSL 证书或者忽略证书异常。

其实和 Fiddler 差不多,Fiddler 也是安装了一个自己的证书使的客户端信任,所以 Mitmproxy 一样也是要让浏览器或者 App 信任该证书,让 Mitmproxy 在中间充当一个中间人的角色——达到截获请求或者响应。

这个不是在做黑产,而是在做我们的开发测试。

2. Mitmproxy 抓包工具安装

在正式安装之前,我们先来看看 Mitmproxy 需要一个怎样的安装环境。

  1. 基于 Python 环境(我电脑使用的是:Python 3.7)
  2. Windows 操作系统中需要安装 Microsoft Visual C++ V14.0 以上(否则会出现保存无法安装)
  3. Linux 操作系统则直接基于 Python 安装即可

首先,我们需要打开我们的命令行工具 CMD ,直接在命令行命令输入以下命令:

pip install mitmproxy

回车就可以安装了,如果以上安装不了出现问题,建议先给自己的 pip 换源一下:Windows pip 换源,但是如果出现报错,咱们继续往下看 。

3. pip 安装出现错误解决方法

3.1 解决方法一

如果出现以下类似的报错信息(图二)我们有两种解决方法,第一种安装 Microsoft Visual c++ Build Tools,来一劳永逸的解决,方法如下:

图二

上图(图二)出现的报错信息,最重要的是:error:Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual c++ Build Tools":http://landinghub.visualstudio.com/visual-cpp-build-tools

记住!认真看报错信息,按你具体提示是链接去浏览器访问。当然有可能链接会访问失败出现 404 之类的。

那如果不行,同学们可以直接点击下面链接直接下载 https://aiyc.lanzous.com/ic7kttc 下载完成之后,我来进行安装,安装也非常的方便,直接运行安装程序即可。这里我简单的把安装截图演示出来(图三):

图三

出现下图(图四)就已经正在安装了:

图四

安装时间看具体电脑,会比较久一些。通过一段时间等待,就安装成功了,需要你重启计算机,重启之后再次运行以下命令即可:

pip install mitmproxy

3.2 解决方法二

此方法如果不能解决还需要用方法解决,请同学们灵活选择。

点击下面链接下载文件,放到桌面(当然,你也看放到其他位置,放到桌面主要为了小白方便,链接:https://www.aiyc.top/mitmproxy-5.1.1-py3-none-any.whl 下载之后,比如我这里演示的时候,.whl 文件放在我的电脑桌面上,我的文件路径:C:\Users\clela\Desktop,接下来我们在命令行输入以下内容:

pip install C:\Users\clela\Desktop\mitmproxy-5.1.1-py3-none-any.whl

如果没有报错,则安装成功。如果其他问题可以自行百度或者底栏留言即可。

4. 验证安装是否成功

那我们该如何验证呢?我们可以查看一下 mitmproxy 的版本,我们在命令行输入:

mitmproxy --version

但是结果报错了 ,我们来看看报错内容:

Error: mitmproxy's console interface is not supported on Windows. You can run mitmdump or mitmweb instead.

我们来简单翻译一下:错误:mitmproxy控制台接口不支持在Windows。您可以运行mitmdump或mitmweb代替。,那这个时候又同学会说:那我们不是白安装了吗?装了半天,还解决 Bug 结果:mitmproxy 不能用,怎么办?

但是,我们可以看见上面报错提示:您可以运行mitmdump或mitmweb代替 所以也就是说 mitmproxy 有两个组件,一个是 mitmdump 另一个是 mitmweb 也就是这三个我们用哪个都可以。

一般我们抓包用的是:mitmproxy,在与 Python 交互的时候用哪一个呢?——我们用的是 mitmdump 而在 Windows 里面我们用 mitmweb ,在 Linux 里面使用 mitmproxy 。在 Linux 与 Windows 里面都是用 mitmdump 与 Python 交互。

那接下来我们来看一下 mitmdump 的版本号,命令如下:

mitmdump --version

输出结果如下:

Mitmproxy: 5.1.1
Python:    3.7.6
OpenSSL:   OpenSSL 1.1.1g  21 Apr 2020
Platform:  Windows-10-10.0.18362-SP0

由上面的结果可知,我们的 Mitmproxy 版本:5.1.1 基于我的 Python 版本:3.7.6 等信息,表明我们 Mitmproxy 安装成功的,而我们的安装平台是:Windows-10-10.0.18362-SP0 (也就是 Windows 10)。

5. Linux 里面安装 Mitmproxy

上面我们在 Windows 平台上安装了 Mitmproxy 接下来我们来看看如何在 Linux 上安装。

在 Linux 里面也是基于 Python 安装的,我们也使用如下命令:

pip3 install mitmproxy

这里使用 pip3 的原因是,Linux 自带 Python2 所以这里是为了区分也是为了使用 Python3 所以使用。

这里我们也是可以查看 mitmproxy 版本号,这回就不会出现 Windows 里面报错的信息了,命令如下:

mitmproxy --version

6. 总结

本章给大家讲解了 Mitmproxy 在 Windows 、Linux 平台的安装,如果你对安装有任何问题欢迎留言,我们下节再见,记得按时来上课噢!

AI悦创·创造不同!
AI悦创 » Mitmproxy 安装

10 评论

  1. 好的,谢谢大佬

  2. 想问一下大佬,为什么我每次一启动 mitmproxy 它就给我抛下面的错误

    PS C:\Users\Administrator> mitmdump --version
    Traceback (most recent call last):
    File "d:\software\python3\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
    File "d:\software\python3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
    File "D:\software\python3\Scripts\mitmdump.exe\__main__.py", line 4, in
    File "d:\software\python3\lib\site-packages\mitmproxy\__init__.py", line 8, in

    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    AttributeError: module 'asyncio' has no attribute 'WindowsSelectorEventLoopPolicy'

    1. 你的是什么电脑?Windows无法直接运行mitmpoxy Windows需要安装 VC++文章有写哦

      1. win10 那个运行库我用上面链接重新装了一次也不行 =.=

                1. 又不清楚可以留言,还可以关注公众号加我入交流群

Leave a Reply