美文网首页技术iOS BlogiOS高级开发
一步一步教你 https 抓包

一步一步教你 https 抓包

作者: hi_xgb | 来源:发表于2016-11-18 13:37 被阅读17474次

    在 Mac 上常用的抓包软件是 Charles,网上关于 Charles 的教程很多,这里介绍另一个抓包神器 mitmproxy。mitmproxy 是一款可交互式的命令行抓包工具,它除了可以抓包查看 http/https 请求,还有一个很强大的功能是拦截并修改 request 或者 response,后面我会用实际例子演示如何修改知乎的回答:)

    安装

    mitmproxy 官网 介绍了用以下命令来安装

    pip install mitmproxy
    

    我在实际安装过程中遇到了一些坑,首先是 OSX El Capitan 及以上的系统版本在安装时会出现 six 模块依赖错误,具体可以看这儿的讨论。还有一个问题是安装过程中会出现权限错误,需要以 root 权限执行。最后用以下命令成功安装,安装不了需要翻一下墙

    sudo pip install mitmproxy --ignore-installed six
    

    开始使用

    首先需要配置一下网络环境,将手机和电脑连在同一个 wifi 环境下,然后进入手机的 设置 - 无线局域网,点击当前连接的 wifi 进入详情设置页面,在 http 代理那一栏输入当前连接的 ip 地址,端口填8080,这个 ip 地址可以在电脑上的 系统偏好 - 网络 里查看,配置完成如下图,

    网络环境配置完成后我们可以开始实际的抓包了,只需在电脑上打开终端(命令行操作窗口),然后输入 mitmproxy -p 8080,如果你看到如下页面说明你已成功进入抓包模式,迈出了第一步,cheer~

    接下去你可以用手机打开一些 App,不出意外你能看到一些 http 请求的列表。这时候我们还无法抓到 https 的包,还需要做一些额外配置。

    下面的操作是针对 iPhone 手机,其他设备也类似。用 iPhone 打开 Safari 浏览器并输入 mitm.it,这时你会看到如下页面,

    选择对应平台并安装证书,安装完成后就可以抓 https 的包了,官网上解释了这个工具是如何工作的

    注意:用浏览器打开时需要已经在抓包模式,否则是无法看到上述页面的

    好了,到这里我们已经完成了所有的准备工作,接下去就和我一起实际体验一下 https 的抓包过程吧。

    这里以知乎为例,用手机打开知乎,我们应该能看到知乎的请求出现在列表里了,类似下图:

    键盘上下移动,Enter 键进入查看详情,按 Tab 键切换顶部导航栏,如下图所示,

    Tips:输入z可以清空列表,输入f再输入~u xxx可以过滤出 url 为 xxx 的请求,更多匹配规则输入? 查看

    请求拦截

    上面演示的是常规的操作,下面介绍一下 mitmproxy 的另一强大功能,拦截修改 request 和 response。

    输入 i,然后输入 ~s 再按回车键,这时候就进入了 response 拦截模式。如果输入 ~q 则进入 request 的拦截模式,更多的命令可以输入 查看。拦截模式下的页面显示如下图所示,

    其中橘红色的表示请求正被拦截,这时 Enter 进入后 再按 e 就可以修改 request 或者 response。修改时是用 vim 进行编辑的,修改完成后按 a 将请求放行,如果要放行所有请求输入 A 即可。

    下图是我修改了某个答案的 response 请求将回答者的名字做了修改,因为只修改了 response 并不会影响其他的用户显示:)

    上面提到的那些指令在输入 后都能查看到,如下图,另外官网上也有很详细的说明

    我用上述方式尝试了大多数的 App,包括淘宝、微博,都能抓到 https 的包,有些有加密,有些没有加密。但是简书做了防中间人攻击的设置,一启用抓包模式就显示网络错误1012,还是做的很不错的,赞一个~

    按照上面的过程操作就可以 https 抓包了,如果有遇到问题可以联系我,记得抓完后将手机 wifi 设置里的 http 代理关闭。开始实际体验一下吧,enjoy~

    如果您觉得本文对您有所帮助,请点击「喜欢」来支持我。

    转载请注明出处,有任何疑问都可联系我,欢迎探讨。

    相关文章

      网友评论

      • 0I24N63:感谢楼主,学习了🤗
      • 0af3ec66c034:对于做了防中间人攻击的设置的App还是无能为力。
      • 十一岁的加重:能抓淘宝的?
      • 焰火青春:有win的?
      • bigggge:请问怎么抓到同一wifi下其他人的包?
      • cdfc7672b68f:mac和iphone连接一个Wi-Fi 设置这个代理后都是无法访问网络的,只能是,就是从mac分享一个热点,手机连接这个热点并设置代理,如果楼主的方法有效记得回复我,测试猿路过
        hi_xgb:@_1_jerry_li 你好,我就是mac和iPhone连接在同一个wifi下,然后在手机里设置代理即可,不需要mac开热点的:smile:
      • 顾慎为:安装倒是成功了,mitmproxy -p 8080也进入那个界面了。但是接下来就不行了,手机上不了网了,那个mitm.it也打不开,这是咋回事啊?
        hi_xgb:不用的
        顾慎为:这玩意是不是必须得是python3.5往上啊?
        hi_xgb:手机wifi设置里的http代理里填的ip和电脑ip是同一个吧?端口号填8080
      • e79b60c40922:手机证书下载不了……
        e79b60c40922:@hi_xgb 问题找到啦,需要先开启代理就可以啦…谢谢
        hi_xgb:@承宣 是网页打开没内容吗?
      • 7b2fa09f149c:Windows用什么
        hi_xgb:@冫不着调的都没边er Windows安装方式可以参考官网说明http://docs.mitmproxy.org/en/latest/install.html
      • 多鱼影视界:厉害了我滴哥:scream:
      • 58fff32c0cdf:麻烦问一下,我电脑端和手机端连接的是同一个wifi,但是IP地址却不一样,这个是为什么?
        hi_xgb:@夜如年 你好,这是正常的。因为这两台物理设备处于同一个内网环境,在同一个内网内根据MAC地址分配IP地址,它们的MAC地址是不同的。当这两台设备访问外网资源时,通过同一个出口访问,那它们的IP地址很有可能是同一个,可以实际抓包看一下这两台物理设备发出的请求的源IP地址是否一致。
      • 076bd8b53e04:赞一个
      • Fretice:Mark一下 留着需要的时候看
      • ba6c70f2fa4f:请我简书怎么做到防止抓包的了?
        ba6c70f2fa4f:@hi_xgb 看到了谢谢我研究研究
        hi_xgb:@王建平 前面评论里有提到的,你翻一下
      • 搁置的幻想:按照你说的操作,我出现了➜ ~ mitmproxy -p 8080
        Traceback (most recent call last):
        File "/usr/local/bin/mitmproxy", line 7, in <module>
        from mitmproxy.main import mitmproxy
        File "/Library/Python/2.7/site-packages/mitmproxy/main.py", line 7, in <module>
        from six.moves import _thread # PY3: We only need _thread.error, which is an alias of RuntimeError in 3.3+
        ImportError: cannot import name _thread这个错误,同为10.11的系统。
        搁置的幻想:@hi_xgb 不能进这个目录
        hi_xgb:@搁置的幻想 试一下用 brew install mitmproxy,需要先安装homebrew,安装方法见这里http://brew.sh
        hi_xgb:@搁置的幻想 你好,你执行一下 cd ~/.mitmproxy 看能否进到这个目录
      • SaiWu:请问如何对整个路由抓包?
      • 独木舟的木:请问 mitmproxy 是免费使用的还是收费软件?
        hi_xgb:@独木舟的木 你好,是免费的
      • 9caeba44b7b3:有安卓的吗?
      • 古斯比德:作者所介绍的功能在charles中均囊括的,而且操作体验性针对mitmproxy要简单的多,使用mitmproxy的成本感觉略高,还要包括针对api的使用熟悉度,同时还要掌握vim的使用习惯等等,所以感觉作者这篇文章只是介绍了另外一款抓包工具而已。
      • 顺其自然_LH:安装不上! :pensive:
        hi_xgb:@顺其自然_LH 如果你的系统版本在10.11以上就执行 sudo pip install mitmproxy --ignore-installed six,10.11以下就执行sudo pip install mitmproxy,需要翻一下墙。
        顺其自然_LH:Command "/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u -c "import setuptools, tokenize;__file__='/private/var/folders/f9/swfdx3w974qfp575pmm_q5_80000gn/T/pip-build-ZJLlHT/lxml/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /var/folders/f9/swfdx3w974qfp575pmm_q5_80000gn/T/pip-pUPMUn-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/f9/swfdx3w974qfp575pmm_q5_80000gn/T/pip-build-ZJLlHT/lxml/
      • 卟师:我能转载分享不?我会标注上作者和出处的
        hi_xgb:@卟师 可以的~
      • 消逝彼得:安装成功后mitmproxy -p 8080命令不识别,楼主求解
        hi_xgb:@消逝彼得 那很有可能是没有安装成功,你怎么确定你已经安装成功了呢?
        消逝彼得:@hi_xgb 用的mac终端,原因就是找不到这条命令啊 :joy:
        hi_xgb:@消逝彼得 你好,你是在哪个平台下操作的呢?错误信息截图发我看下,文章里有我的联系方式。
      • 第十六个梦:那个 想请教一下 我们学校的网络限制我们的wifi不能上手机qq 微信 贴吧 知乎等等常见的软件 可以用这种方法取消阻止吗
        hi_xgb:@michael_kj 是的,ssh -D,类似翻墙的方式说不定可以:smile:
        fc6c92456b42:@第十六个梦 买个主机ssh中转下吧
        hi_xgb:@第十六个梦 不行的,这个方法只能分析,你这个情况应该是学校路由器层面做了限制,只要连的是这个wifi就绕不过去。
      • 862c9fb99650:醒来看,=_=困
      • 迦度蓝洛:windows 可以用吗 :smiley:
      • 2453cf172ab4:不错,用工具的确就可以做好多事了
      • 张小逗童鞋:支持HTTPS协议的,你确定你能抓包,获取到其中的数据???
        hi_xgb:@轩辕逍遥 是按照我上面说的方法吗?
        张小逗童鞋:@hi_x我遇到支持HTTPS协议,都是看不到明文的
        hi_xgb:@轩辕逍遥 可以的,例子里知乎的数据就能看到,有些App用了https还加密了,那就看不到明文了
      • Eugene1024:很感兴趣,Mark 持续关注
      • 顾慎为:知道了我一直想知道的事!
      • b08163971725:感觉和fiddler差的不太多:smile:
        hi_xgb:@胖威威要次肉 嗯嗯,多一个选择~
      • CrazySteven:很好很强大,赞一个〜
        hi_xgb:@CrazySteven 谢谢支持~
      • 菊上一枝梅:赞一个:+1:
        hi_xgb:@Regret_V 谢谢支持~
      • 代码行者:修改请求和相应,Charles早就有这些功能呀!:sunglasses:
        hi_xgb:@代码行者 嗯嗯,有个Breakpoints功能,多谢指出~
      • 叮宕:以前只知道python 有个scrapy。这个很不错,可以试试
        叮宕:@zhangnew 长时间不用,记不得了,python有个包可以抓包,直接封装包,我之前用这个伪造arp包,发动过中间人攻击。现在记不得模块的名字了。
        0af3ec66c034:爬虫和抓包是两码事
      • f09dcd161f81:你好,请问简书那种阻止抓包的,是如何实现的?能否大概说一下?
        f09dcd161f81:@hi_xgb 赞! 谢谢!
        hi_xgb:@奔波儿霸霸波儿奔 你好,可以参考这两个链接:
        1. http://blog.csdn.net/u010731949/article/details/50538280
        2. http://www.cocoachina.com/ios/20160224/15394.html
      • 雪飞鸿:学习抓包
      • Cocoa_Coder:好文
        hi_xgb:@liusenpo 谢谢支持:smiley:
      • Daz_ye:赞
        hi_xgb:@Daz_ye 谢谢~:smile:
      • 小菜一碟321:青花瓷也不错,兄台可以试试
        hi_xgb:@小菜一碟321 前面的回复说Charles没法修改请求说错了,下面有朋友指出了,Charles也有Breakpoints功能,青花瓷确实不错~
        hi_xgb:@小菜一碟321 Charles吗?Charles查看图片资源的请求很直观,但是没法修改请求,可以配合使用~
      • 笨小孩__:这个抓包工具是开源的吗?
        笨小孩__: @hi_xgb 谢谢分享😁
        hi_xgb:@笨小孩__ 这儿有源码:https://github.com/mitmproxy/mitmproxy
      • 5462deb42e13:通信工程大三狗路过,表示佩服
        hi_xgb:@saflywen 谢谢~加油
      • myzhing:不错
        hi_xgb:@myzhing 谢谢~看完可以实际操作一下加深印象
      • 0c1b45b7f3f4:抓包有什么用么?
        范德萨范德萨范德萨:@_你是如此难以忘记 抓包可以获取数据,获取数据对程序猿很重要。
        0c1b45b7f3f4:@hi_xgb 哦哦!谢谢!
        hi_xgb:@_你是如此难以忘记 抓包可以看到 http 请求的数据格式,对于 http 协议的理解很有帮助。另外抓包也能看到其他 App 在http传输时的数据,要是开发者不注意很有可能会泄露用户的隐私数据。
      • 吴钧泽:很详细 不错:smile:
        hi_xgb:@吴钧泽 谢谢~实际操作一遍效果更佳哦
      • 修行一:不错
        hi_xgb:@修行一 谢谢~实际操作一遍效果更佳哦

      本文标题:一步一步教你 https 抓包

      本文链接:https://www.haomeiwen.com/subject/zzojpttx.html