2015-08-24 37 views
0

我需要利用python的mitmproxy。我已成功安装它。然而,当我在我的终端上运行mitmproxy命令它给我像下面的堆栈跟踪:在Mac上运行MITM代理

File "/usr/local/bin/mitmproxy", line 9, in load_entry_point('mitmproxy==0.13', 'console_scripts','mitmproxy'()

File "/Library/Python/2.7/site-packages/pkg_resources/init.py", line 558, in load_entry_pointreturn get_distribution(dist).load_entry_point(group, name)

File "/Library/Python/2.7/site-packages/pkg_resources/init.py", line 2682, in load_entry_point return ep.load()

File "/Library/Python/2.7/site-packages/pkg_resources/init.py", line 2355, in load return self.resolve()

File "/Library/Python/2.7/site-packages/pkg_resources/init.py", line 2361, in resolve module = import(self.module_name, fromlist=['name'], level=0)

File "/Library/Python/2.7/site-packages/libmproxy/main.py", line 7, in from . import version, cmdline

File "/Library/Python/2.7/site-packages/libmproxy/cmdline.py", line 5, in from netlib import http

File "/Library/Python/2.7/site-packages/netlib/http.py", line 7, in from . 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 attribute 'TLSv1_2_METHOD'

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

要知道我PyOpen SSL我没有在Python提示符下的当前版本,并得到了ouptut如下图所示为0.13:

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

所以我试着用下面的升级我pyOpenSSL:

sudo pip install --upgrade pyOpenSSL

ANS成功这样做,因为当我再次运行上述我接收到在输出的第一行如下:

Requirement already up-to-date: pyOpenSSL in /Library/Python/2.7/site-packages

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

但是,当我在Python提示符下再次运行下面的代码时,我再次收到版本为0.13。理想情况下,我期待它现在提供更新版本。

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

有些博客提示,如果我安装了virtualevn,它可能会干扰上述情况。所以我卸载virtualenv以及使用

sudo pip uninstall virtualenv

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

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

回答

0

所以它又发生了。 :P我可以通过上述方法找出问题,并且可以通过我自己的 - 课程 - 在一些朋友和博客的帮助下解决问题!

所以出现这个问题是因为许多不合时宜的依赖实际上是: -

  • 过时的OpenSSL -

    current version displayed using OpenSSL version -a Awesome help found @http://javigon.com/2014/04/09/update-openssl-in-osx/ to update OpenSSL and from a friend (https://anantshri.info/) who pointed out the issue itself initially.

  • 过时pyOpenSSL - 使用下面这当然升级同一个升级版。

    sudo pip install --upgrade pyOpenSSL

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

    import OpenSSL
    print OpenSSL.version
    0.13 because there were 2 different OpenSSLs in the system. One that was installed by pip and the other that was by default present in OSX. Again awesome help found @https://github.com/pyca/pyopenssl/issues/128

一些有用的命令该助手分别为:

pip show pyOpenSSL - gives as output : Name: pyOpenSSL
Version: 0.15.1
Location: /Library/Python/2.7/site-packages

作为输出的一部分 - 指示使用PIP实际上0.15是安装在OpenSSL。1

交叉验证使用:

ls /Library/Python/2.7/site-packages/ | grep OpenSSL - gives as output:
pyOpenSSL-0.15.1.dist-info

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

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/OpenSSL
and cat version.py
in the above dir gave the below as part of output : version = '0.13.1'

表明与import语句的问题的原因出过时的Python版本。

And the above itself was the root cause for mitmproxy also not working

因为mitmproxy无法使用OpenSSL上的最新版本。
所以通过只是更新一个从/Library/Python/2.7/site-packages/

更换的OpenSSL在上述路径(这是过时)

其中

cat ./OpenSSL/version.py gave as output (once again just to cross-verify)
version = '0.15.1'

现在问题解决了导入语句报告了正确版本的OpenSSL。

Uninstalled mitmproxy using sudo pip uninstall mitmproxy - successfully uninstalled. Also uninstalled virtualenv. (not sure of the above 2 was required !)

重新安装mitmproxy as sudo pip install mitmproxy - 成功完成! 现在从终端没有毛病,现在运行mitmproxy! :)

+0

嘿,它也没有工作后这也。名称错误 –