Mac下使用mitmproxy抓包HTTPS数据方法详解

来源:脚本之家  责任编辑:小易  

概述:情感交叉擦腿综合征(masturbationsyndrome)是一个病因不明治疗尚不统一的综合征。小儿多见指的是儿童反复用手或其他物件摩擦自己外生殖器的行为亦有人称之为手淫(masturbation)。几乎所有的儿童在其生长发育过程中,都可出现或轻或重的这类行为。半岁左右的婴儿即可出现,但多见于2岁以后多数在幼儿至学龄前比较明显,上学后多数消失至青春期后又明显增加男孩多于女孩情感交叉擦腿综合征在小儿时期多见多见于2岁以后,男孩、女孩均可发病。发病机制目前研究的结果其发病可能与神经介质紊乱有关可由胆碱系统代谢障碍进而引起多巴胺功能亢进所致。 具体说来有两类学说一类称传统观点;另一类为神经介

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

安装

聊文玩,找空空,关注收藏讲堂头条号,学习文玩知识!众所周知,郭德纲在文玩圈里可是顶有面子的人物,他的文玩不仅种类繁多,价值不菲的更是不少,简直可以在相声圈子里开一个文玩博物馆了。以下仅仅是郭德纲老师文玩的冰山一角。郭德纲老师有这么多文玩,但空空没想到他最爱的文玩,竟然是便宜又小众的竹根!不信大家看他微博满屏满眼的文玩竹根,郭老师还真是万千佳丽,独宠竹根一物啊!竹根是什么?为什么郭德纲偏爱它呢?竹根是什么?其实竹根也是文玩的一种,竹根即竹子的根,用竹根做成的文玩,既美观又不昂贵。而且在中国的文化中,竹子的有着坚强的生命力,是品格高雅、坚韧的象征。郭德纲为什么会偏爱它呢?至于郭老师为什么会喜欢竹根

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

如果喜欢我的文章,请点击右上角蓝色关注哟!1巧克力:含有甲基黄嘌呤,吃很小的量就会引起呕吐,过量甚至导致死亡。2酒精:一小口酒精可能就会导致你的爱宠呕吐,呼吸困难,中毒昏迷甚至死亡。3牛油果:近年风靡全球的健康水果,但是对宠物却是致命的。含有胃蛋白酶,可以引起宠物呕吐腹泻,除猫狗外,也要避免喂食兔子,荷兰猪,观赏鸟等。4葡萄和葡萄干:会导致肾衰竭,非常严重哟。一定要严防死守,一颗都不许吃。5泡泡糖和口香糖:含有木糖醇,是一种化学毒性物质,会引起食道和肠管蠕动受限,导致肥胖,牙病,甚至糖尿病。6洋葱和大蒜:含有亚砜和二硫化物,可以作用于红细胞,导致贫血。7苹果核儿:虽然很小,可是含有一种已经证明

pip install mitmproxy

信者有,不信者无,鬼论之争这么久了,也没个结果,有办法去证明有,别人有不信。没啥好说的。邪气之地,风水不顺,阴深之地。都会有不正之风出现。何为不正之风,被风吹到者,会有头晕目眩之症状,然看到平常看不到的东西,听到平时听不见的话,心烦,气燥。

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

pip install mitmproxy --ignore-installed six

开始使用

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

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

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

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

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

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

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

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

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

Tips:输入z可以清空列表,输入f再输入~uxxx可以过滤出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~

更多关于抓包HTTPS数据的文章大家可以参考下面的相碰链接

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

mitmproxy怎么设置抓包

实践环境  iMac一台、华为B199(Android4.4)手机一部,这两者都连着同一个wifi。mitmproxy安装版本为0.11.3。iMac的ip地址为:192.168.0.104  mitmproxy安装与设置  下载mitmproxy。推荐下载二进制安装包(当前版本为0.11.3),因为使用pip安装会由于墙的原因安装失败。下载成功之后解压,便可直接点击名为“mitmproxy”的文件了。  在iMac上运行和设置mitmproxy。由于直接点击运行是没有设置mitmproxy参数的,所以咱们需要在命令行里面输入mitmproxy进行设置:  Shell  $[YOUR_DOWNLOAD_PATH]/mitmproxy-b192.168.0.104-p9527  注意,此处的[YOUR_DOWNLOAD_PATH]为下载mitmproxy二进制文件解压后所对应的目录,就我而言的目录就是:~/Downloads/osx-mitmproxy-0.11.3.其中ip设置为iMac的ip,端口则按照自己的个人喜好来。

如何抓取汽车之家的车型库 Python中文社区

实际上,关于「如何抓取汽车之家的车型库」,我已经在「使用 Mitmproxy 分析接口」一文中给出了方法,不过那篇文章里讲的是利用 API 接口来抓取数据,一般来说,因为接口不会频繁改动,相对 WEB 页面而言更稳定,所以通常这是数据抓取的最佳选择,不过利用 API 接口来抓取数据有一些缺点,比如有的数据没有 API 接口,亦可能虽然有 API 接口,但是数据使用了加密格式,此时只能通过 WEB 页面来抓取数据。

既然要通过 WEB 页面来抓取数据,那么就不得不提到Scrapy,它可以说是爬虫之王,我曾经听说有人用 Scrapy,以有限的硬件资源在几天的时间里把淘宝商品数据从头到尾撸了一遍,如此看来,本文用 Scrapy 来抓取汽车之家的车型库应该是绰绰有余的了。

在抓取汽车之家的车型库之前,我们应该对其结构有一个大致的了解,按照百科中的描述,其大致分为四个级别,分别是品牌、厂商、车系、车型。本文主要关注车系和车型两个级别的数据。在抓取前我们要确定从哪个页面开始抓取,比较好的选择有两个,分别是产品库和品牌找车,选择哪个都可以,本文选择的是品牌找车,不过因为品牌找车页面使用了 js 来按字母来加载数据,所以直接使用它的话可能会有点不必要的麻烦,好在我们可以直接使用从A到Z的字母页面。

假设你已经有了 Scrapy 的运行环境(注:本文代码以 Python3 版本为准):

shell> scrapy startproject autohome

shell> cd autohome

shell> scrapy genspider automobile www.autohome.com.cn -t crawl

如此就生成了一个基本的蜘蛛骨架,需要说明的是 Scrapy 有两种蜘蛛,分别是 spider 和 crawl,其中 spider 主要用于简单的抓取,而 crawl 则可以用来实现复杂的抓取,复杂在哪里呢?主要是指蜘蛛可以根据规则萃取需要的链接,并且可以逐级自动抓取。就抓取汽车之家的车型库这个任务而言,使用 spider 就可以实现,不过鉴于 crawl 在功能上更强大,本文选择 crawl 来实现,其工作流程大致如下:通过 start_urls 设置起始页,通过 rules 设置处理哪些链接,一旦遇到匹配的链接地址,那么就会触发对应的 callback,在 callback 中可以使用 xpath/css 选择器来选择数据,并且通过 item loader 来加载 item:

车系

车型

文件:autohome/items.py:

# -*- coding: utf-8 -*-

import scrapy

from scrapy.loader.processors import MapCompose, TakeFirst

class SeriesItem(scrapy.Item):

series_id = scrapy.Field(

input_processor=MapCompose(lambda v: v.strip("/")),

output_processor=TakeFirst()

)

series_name = scrapy.Field(output_processor=TakeFirst())

class ModelItem(scrapy.Item):

model_id = scrapy.Field(

input_processor=MapCompose(lambda v: v[6:v.find("#")-1]),

output_processor=TakeFirst()

)

model_name = scrapy.Field(output_processor=TakeFirst())

series_id = scrapy.Field(output_processor=TakeFirst())

文件:autohome/autohome/spiders/automobile.py:

# -*- coding: utf-8 -*-

import json

import string

from scrapy import Request

from scrapy.http import HtmlResponse

from scrapy.linkextractors import LinkExtractor

from scrapy.loader import ItemLoader

from scrapy.spiders import CrawlSpider, Rule

from urllib.parse import parse_qs, urlencode, urlparse

from autohome.items import ModelItem, SeriesItem

class AutomobileSpider(CrawlSpider):

name = "automobile"

allowed_domains = ["www.autohome.com.cn"]

start_urls = [

"" + x + ".html"

for x in string.ascii_uppercase if x not in "EIUV"

]

rules = (

Rule(LinkExtractor(allow=("/\d+/#",)), callback="parse_item"),

)

def parse(self,response):

params = {

"url": response.url,

"status": response.status,

"headers": response.headers,

"body": response.body,

}

response = HtmlResponse(**params)

return super().parse(response)

def parse_item(self, response):

sel = response.css("div.path")

loader = ItemLoader(item=SeriesItem(), selector=sel)

loader.add_css("series_id", "a:last-child::attr(href)")

loader.add_css("series_name", "a:last-child::text")

series = loader.load_item()

# 即将销售 & 在售

for sel in response.css("div.interval01-list-cars-infor"):

loader = ItemLoader(item=ModelItem(), selector=sel)

loader.add_css("model_id", "a::attr(href)")

loader.add_css("model_name", "a::text")

loader.add_value("series_id", series['series_id'])

yield loader.load_item()

# 停售

url = ""

years = response.css(".dropdown-content a::attr(data)")

for year in years.extract():

qs = {

"y": year,

"s": series["series_id"]

}

yield Request(url + "?" + urlencode(qs), self.stop_sale)

def stop_sale(self, response):

data = parse_qs(urlparse(response.url).query)

body = json.loads(response.body_as_unicode())

for spec in body["Spec"]:

yield {

"model_id": str(spec["Id"]),

"model_name": str(spec["Name"]),

"series_id": str(data["s"][0]),

}

把如上两段源代码拷贝到对应的文件里,下面我们就可以让蜘蛛爬起来了:

shell> scrapy crawl automobile -o autohome.csv

抓取的结果会保存到 autohome.csv 里。如果保存到 json 文件中,那么有时候你可能会发现输出的都是 unicode 编码,此时可以设置FEED_EXPORT_ENCODING来解决,如果想保存到数据库中,那么可以使用 Scrapy 的pipeline来实现。

如果你完整读过 Scrapy 的文档,那么可能会记得在spiders一章中有如下描述:

When writing crawl spider rules, avoid using parse as callback, since the CrawlSpider uses the parse method itself to implement its logic. So if you override the parse method, the crawl spider will no longer work.

意思是说,在使用 crawl 的时候,应该避免覆盖 parse 方法,不过本文的源代码中恰恰重写了 parse 方法,究其原因是因为汽车之家的字母页存在不规范的地方:

shell> curl -I h

HTTP/1.1 200 OK

Date: ...

Server: ...

Content-Type: text/html, text/html; charset=gb2312

Content-Length: ...

Last-Modified: ...

Accept-Ranges: ...

X-IP: ...

Powerd-By-Scs: ...

X-Cache: ...

X-Via: ...

Connection: ...

乍看上去好像没什么问题,不过仔细一看就会发现在 Content-Type 中 text/html 存在重复,此问题导致 Scrapy 在判断页面是否是 html 页面时失败。为了修正此问题,我重写了 parse 方法,把原本是 TextResponse 的对象重新包装为 HtmlResponse 对象。通过抓取竟然还帮助汽车之家找到一个 BUG,他们真是应该谢谢我才对。

有时候,为了避免蜘蛛被对方屏蔽,我们需要伪装 User-Agent,甚至通过一些代理服务来伪装自己的 IP,本文篇幅所限,就不多说了,实际上,Scrapy 不仅仅是一个库,更是一个平台,本文涉及的内容只能算是管中窥豹,有兴趣的读者不妨多看看官方文档,此外,网上也有很多例子可供参考。

0 0

  • 本文相关:
  • python代理工具mitmproxy使用指南
  • python使用mitmproxy抓取浏览器请求的方法
  • 详解安装mitmproxy以及遇到的坑和简单用法
  • python gui库图形界面开发之pyqt5 qt designer工具(qt设计师)详细使用方法及designer ui文件转py文件方法
  • python解释器及pycharm工具安装过程
  • python监控服务器实用工具psutil使用解析
  • python抓包程序mitmproxy安装和使用过程图解
  • 黑客秘籍:windows下权限设置
  • 超初级的linux后门制作方法
  • 密码知识教程一
  • asp漏洞全接触-入门篇
  • 恶意代码与网络安全
  • 看别人怎么查qq聊天记录 比较详细查询qq聊天记录的方法?
  • 真正能用,还有点效果的css挂马代码的方法
  • mac下使用mitmproxy抓包https数据方法详解
  • 详解web攻击之csrf攻击与防护
  • 分析攻击ip来源地与防御ip攻击的应对策略
  • mitmproxy怎么设置抓包
  • 如何抓取汽车之家的车型库 Python中文社区
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved