2015-08-24 32 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

嘿,它也沒有工作後這也。名稱錯誤 –