捕获移动APP HTTP/HTTPS网络数据包
作者:互联网
大部分APP使用的数据通信基于HTTP/HTTPS,使用工具对其数据包进行获取
Mitmproxy抓取数据包
该抓包程序基于命令行,运行后会默认在当前电脑的8080端口开启一个代理服务,这个服务实际上是一个HTTP/HTTPS代理。将手机和mitmproxy所在的电脑处于同一局域网下,配置好CA证书,将手机网络代理设置为mitmproxy的代理服务地址。手机访问互联网的数据包将会流经mitmproxy,再由mitmproxy把这些数据包转发给真正的服务器,mitmproxy相当于中间人。
安装后在终端输入mitmproxy即可启动一个代理服务,如下是捕获到的手机HTTP/HTTPS数据包
点击可以查看数据包详细信息
调试于是利用该程序可以观察手机发送的请求,对请求进行修改并重新发送
Mitmdump实时抓包处理
使用Mitmdump对接Python脚本,基于此可在Python脚本中获得请求和响应的内容时,可以顺便添加一些解析、存储数据的逻辑,实现数据的抓取和实时处理
实例引入
编写如下python代码,文件名为test.py:
def request(flow):
flow.request.headers['User-Agent'] = 'Mitmproxy'
print(flow.request.headers)
在目录下打开终端,执行mitmdump -s test.py,如下是部分处理结果
在上述代码中,定义了一个request方法,参数是flow,这是一个HTTPFlow对象,调用request属性即可获取当前的全球对象。这里将当前请求对象的请求头User-Agent修改成了MitmProxy,然后答打印出了所有请求头。
日志输出
mitmdump提供了专门的日志输出功能,可以设定以不同的颜色输出不同级别的结果,代码如下:
from mitmproxy import ctx
def 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))
此处调用了ctx模块,有一个log的功能,设定不同的颜色输出不同级别的结果,以便调试
调用info方法输出的结果为白色,调用warn方法输出的结果为黄色,调用error方法输出的结果为红色
请求与响应
编写如下代码:
from mitmproxy import ctx
def request(flow):
request = flow.request
info = ctx.log.info
info(request.url)
info(str(request.headers))
info(str(request.cookies))
info(request.host)
info(request.method)
info(str(request.port))
info(request.scheme)
上述代码用于打印请求的一些基本属性
不仅可以显示,还可以修改,比如将目标URL修改,如下所示:
from mitmproxy import ctx
def request(flow):
url = "https://www.baidu.com"
flow.request.url = url
同样的,mitmdump针对响应也提供了对应的处理接口,即response方法
from mitmproxy import ctx
def response(flow):
response = flow.response
info = ctx.log.info
info(str(response.status_code))
info(str(response.headers))
info(str(response.cookies))
info(str(response.text))
运行脚本,可以看到接收到的信息
标签:info,HTTP,str,request,flow,mitmproxy,ctx,HTTPS,数据包 来源: https://www.cnblogs.com/N3ptune/p/16424295.html