0

我需要使用 python 的 mitmproxy。我已经安装成功了。但是,当我在终端上运行 mitmproxy 命令时,它会给我一个堆栈跟踪,如下所示:

文件“/usr/local/bin/mitmproxy”,第 9 行,在 load_entry_point('mitmproxy==0.13', 'console_scripts','mitmproxy'()文件

“/Library/Python/2.7/site-packages/pkg_resources/init .py”,第 558 行,在 load_entry_pointreturn get_distribution(dist).load_entry_point(group, name) 文件“/Library/Python/2.7/site-packages/pkg_resources/init .py”,第 2682 行,在load_entry_point返回 ep.load( ) 文件“/Library/Python/2.7/site-packages/pkg_resources/init .py ”,第 2355 行,加载返回 self.resolve()文件 “/Library/Python/2.7/site-packages/pkg_resources/init .py ",第 2361 行,在解析模块 =导入(self.module_name,fromlist=[' name '], level=0)







文件“/Library/Python/2.7/site-packages/libmproxy/main.py”,第 7 行,来自 . 导入版本,cmdline

文件“/Library/Python/2.7/site-packages/libmproxy/cmdline.py”,第 5 行,从 netlib 导入 http

文件“/Library/Python/2.7/site-packages/netlib/http.py ",第 7 行,从 . import odict, utils, tcp, http_status

File "/Library/Python/2.7/site-packages/netlib/tcp.py", line 26, in 'TLSv1.2': SSL.TLSv1_2_METHOD, AttributeError: 'module' object has no属性“TLSv1_2_METHOD”

我尝试通过一些谷歌搜索来调试这个问题,看起来我需要升级我的 pyOpenSSL。

要知道我的 PyOpen SSL 的当前版本,我在 Python 提示符下执行了以下操作,得到的输出如下所示为 0.13:

>>> import OpenSSL
>>> print OpenSSL.__version__
0.13

所以我尝试使用以下命令升级我的 pyOpenSSL:

sudo pip install --upgrade pyOpenSSL

ans 成功地这样做了,因为当我再次运行上述内容时,我在输出的第一行收到以下内容:

要求已经是最新的:/Library/Python/2.7/site-packages 中的 pyOpenSSL

只是为了交叉验证,我去了上面的路径,发现 PyOpenSSL 目录为 PyOpenSSL-0.15.1.dist-info。所以我猜测 PyOpenSSL 实际上已升级到最新版本。

但是,当我再次在 Python 提示符下运行以下命令时,我再次收到了 0.13 版本。理想情况下,我期待它现在提供更新版本。

>>> import OpenSSL
>>> print OpenSSL.__version__
0.13

一些博客建议如果我安装了 virtualevn,它可能会干扰上述内容。所以我也卸载了virtualenv

sudo pip 卸载 virtualenv

我仍然无法让 mitmproxy 运行。当我运行 mitmproxy 时,我仍然得到与上面相同的错误。

请让我知道我缺少什么以及如何让 mitmproxy 运行。

4

1 回答 1

0

所以它再次发生。:PI 可以在一些朋友和博客的帮助下自行解决上述方法的问题和解决方案 - 当然 - !

看来问题实际上是由于许多过时的依赖关系:-

  • 过时的 OpenSSL -

    使用 OpenSSL 版本显示的当前版本 -a Awesome help found @ http://javigon.com/2014/04/09/update-openssl-in-osx/更新 OpenSSL 和来自朋友(https://anantshri.info/ ) 谁最初指出了问题本身。

  • 过时的 pyOpenSSL - 使用下面的升级,当然升级相同。

    sudo pip install --upgrade pyOpenSSL

  • 那为什么下面仍然显示过时的版本?

    导入 OpenSSL
    打印 OpenSSL。版本
    0.13,因为系统中有 2 个不同的 OpenSSL。一个由 pip 安装,另一个默认存在于 OSX 中。再次找到了很棒的帮助 @ https://github.com/pyca/pyopenssl/issues/128

一些有用的命令是:

pip show pyOpenSSL - 作为输出: 名称:pyOpenSSL
版本:0.15.1
位置:/Library/Python/2.7/site-packages

作为输出的一部分 - 表明使用 pip 安装的 OpenSSL 实际上是 0.15.1

使用交叉验证:

ls /Library/Python/2.7/site-packages/ | grep OpenSSL - 输出:
pyOpenSSL-0.15.1.dist-info

现在下面的路径也有另一个 OpenSSL 副本:

上述目录中的/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/OpenSSL
和 cat version.py
将以下内容作为输出的一部分: version = '0.13.1'

表明导入语句显示过时的 python 版本的问题的原因。

以上本身就是 mitmproxy 也无法正常工作的根本原因

因为 mitmproxy 无法在 OpenSSL 上使用最新版本。
因此,只需将上述路径(已过时)中的 OpenSSL 替换为 /Library/Python/2.7/site-packages/ 中的更新路径即可解决问题

在哪里

cat ./OpenSSL/version.py 作为输出(再次只是为了交叉验证)
version = '0.15.1'

现在 import 语句报告了正确的 OpenSSL 版本。

使用 sudo pip uninstall mitmproxy 卸载 mitmproxy - 已成功卸载。还卸载了virtualenv。(不确定是否需要上述 2 项!)

将 mitmproxy 重新安装为 sudo pip install mitmproxy - 成功完成!现在从终端运行 mitmproxy 没有出现故障!:)

于 2015-08-24T18:52:23.810 回答