使MITM代理在Mac上运行

时间:2015-08-24 15:32:16

标签: macos python-2.7 pyopenssl mitmproxy

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

  

文件" / usr / local / bin / mitmproxy",第9行,在load_entry_point中(' mitmproxy == 0.13',' console_scripts',&# 39; 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行,在resolve module = import (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 import 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" ;,第26行,在' TLSv1.2':SSL.TLSv1_2_METHOD,AttributeError:'模块'对象没有属性' TLSv1_2_METHOD'

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

要了解我的PyOpen SSL的当前版本,我在Python提示符下执行了以下操作,并获得如下所示的ouptut为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运行。

1 个答案:

答案 0 :(得分:0)

所以它又发生了。 :P我可以通过上述方法及其解决方案来解决问题 - 我自己 - 在一些朋友和博客的帮助下进行的课程!

所以看来问题实际上是因为很多过时的依赖: -

  • 过时的OpenSSL -
      

    使用OpenSSL版本-a显示的当前版本   很棒的帮助找到@ 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-信息

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

  

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/OpenSSL
和cat version.py
在上面的dir中给出了以下作为输出的一部分:   版本 ='0.13.1'

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

  

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

因为mitmproxy无法在OpenSSL上使用最新版本。
只需用/Library/Python/2.7/site-packages /

中更新的路径替换上述路径中的OpenSSL(已过时),解决了这个问题

其中

  

cat ./OpenSSL/version.py给出了输出(再一次只是交叉验证)
  版本 ='0.15.1'

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

  

使用sudo pip卸载mitmproxy卸载了mitmproxy - 已成功卸载。还卸载了virtualenv。 (不确定上面的2是必需的!)

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