mitmproxy还有两个关联组件。
一个是mitmdump,这是它的核心组件,监听信息流,和利用其他措辞(python,js)掌握。
它是mitmproxy的命令行接口,利用它我们可以对接Python脚本,用Python实现监听后的处理。
另一个是mitmweb,它是一个Web程序,通过它我们可以清楚不雅观察mitmproxy捕获的要求(类似于客户端)。
python的安装如下:

pip3 install mitmproxymitmproxy核心功能拦截HTTP和HTTPS要乞降相应。
仿照客户端发起要求,仿照做事端返回相应。
利用反向代理将流量转发给指定的做事器。
利用Python对HTTP要乞降相应进行实时处理。

核心功能在于第四点,我们可以通过Python处理和掌握HTTP要求,相对付传统的抓包工具chalers,findder这便是他的核心优点。
它供应了我们用程序掌握HTTP/HTTPS要求的办法(我实在更喜好说数据流,但是HTTP类的数据只是个中一部分),爬虫便是看中这个优点,让我们可以更好的分开人力,去实现自动化操作,这也是我想先容一下这个工具的核心。

代理抓包事理

和Charles一样,mitmproxy运行于自己的PC上,mitmproxy会在运行环境下监听一个端口,然后开启一个代理做事,这个做事实际上是一个HTTP/HTTPS的代理。

mitmproxy拦截php文件异端爬虫mitmproxy详解 Ruby

手机和PC在同一个局域网内,设置代理为mitmproxy的代理地址,这样手机在访问互联网的时候流量数据包就会流经mitmproxy,mitmproxy再去转发这些数据包到真实的做事器,做事器返回数据包时再由mitmproxy转发回手机,这样mitmproxy就相称于起了中间人的浸染,抓取到所有Request和Response,其余这个过程还可以对接mitmdump,抓取到的Request和Response的详细内容都可以直接用Python来处理,比如得到Response之后我们可以直接进行解析,然后存入数据库,这样就完成了数据的解析和存储过程。

实在很多抓包都是通过这个事理,乃至像我常用的SPLASH(渲染工具,类似于Selenium,只不过更优雅,可以把它算作一个定制化的selenium的微做事)都是通过类似的事理。

利用

手机抓包大家都知道要安装证书便是相称于一个护照有了它你才可以出国旅游,在你安装好mitmdump,我们须要在同一个局域网下,填入我们启动mitmproxy做事的机器的IP,然后输入端口,这样手机的数据将会流过这个端口。

局域网下,填入IPV4和监听端口

手机配置好往后我们就开始利用了首先是访问mitm.it网站安装证书(不管是chalers还是finddler实现手机抓包都须要证书),且须要手机设置信赖证书,这里就不赘述了。

抓包到的信息就会在我们的命令行交互窗口显示,而我们则可以用python编写脚本来让mitmproxy进走运行处理并返回值。

我这里供应几个大略的实例:

利用命令启动mitmproxy,并将截获的数据保存到指定文件中

mitmdump -w outfile利用指定命令截获的数据,如指定处理脚本文件为test.py.

mitmdump -s test.py日志输出

from mitmproxy import ctxdef request(flow): # 修正要求头 flow.request.headers['User-Agent'] = 'MitmProxy' ctx.log.info(str(flow.request.headers)) ctx.log.warn(str(flow.request.headers)) ctx.log.error(str(flow.request.headers))Request要求

from mitmproxy import ctx# 所有的要求都会经由requestdef request(flow): info = ctx.log.info # info(flow.request.url) # info(str(flow.request.headers)) # info(str(flow.request.cookies)) # info(flow.request.host) # info(flow.request.method) # info(str(flow.request.port)) # info(flow.request.scheme) print(flow.request.method,\"大众:\公众,flow.request.url)Response相应

from mitmproxy import ctx

# 所有的要求都会经由request

def response(flow):

info = ctx.log.info

# info(flow.response.url)

# info(str(flow.response.headers))

# info(str(flow.response.cookies))

info(str(flow.response.status_code))

# info(str(flow.response.text))

官网python实例

写在末了

mitmproxy实在便是一个升级版的抓包工具,在自动化测试,或者爬虫中运用都比较广泛,乃至有时候利用别人的代理时,我都在想:如果别人利用类似的工具把我利用的数据流网络,那么供应代理的机器完备能理解我到底做了什么,我的信息安全肯定也会受到威胁(还好没太多个人信息)。

如果有想学爬虫的或者做技能互换,可以私信我,有个小群,大家相互互换。

封面