ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

捕获移动APP HTTP/HTTPS网络数据包

2022-06-29 17:35:21  阅读:168  来源: 互联网

标签:info HTTP str request flow mitmproxy ctx HTTPS 数据包


大部分APP使用的数据通信基于HTTP/HTTPS,使用工具对其数据包进行获取

Mitmproxy抓取数据包

该抓包程序基于命令行,运行后会默认在当前电脑的8080端口开启一个代理服务,这个服务实际上是一个HTTP/HTTPS代理。将手机和mitmproxy所在的电脑处于同一局域网下,配置好CA证书,将手机网络代理设置为mitmproxy的代理服务地址。手机访问互联网的数据包将会流经mitmproxy,再由mitmproxy把这些数据包转发给真正的服务器,mitmproxy相当于中间人。

安装后在终端输入mitmproxy即可启动一个代理服务,如下是捕获到的手机HTTP/HTTPS数据包

image-20220629145513240

点击可以查看数据包详细信息

image-20220629150727142

调试于是利用该程序可以观察手机发送的请求,对请求进行修改并重新发送

Mitmdump实时抓包处理

使用Mitmdump对接Python脚本,基于此可在Python脚本中获得请求和响应的内容时,可以顺便添加一些解析、存储数据的逻辑,实现数据的抓取和实时处理

实例引入

编写如下python代码,文件名为test.py:

def request(flow):
    flow.request.headers['User-Agent'] = 'Mitmproxy'
    print(flow.request.headers)

在目录下打开终端,执行mitmdump -s test.py,如下是部分处理结果

image-20220629152516166

在上述代码中,定义了一个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的功能,设定不同的颜色输出不同级别的结果,以便调试

image-20220629153458053

调用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)

上述代码用于打印请求的一些基本属性

image-20220629155149495

不仅可以显示,还可以修改,比如将目标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))

运行脚本,可以看到接收到的信息

image-20220629160352001

标签:info,HTTP,str,request,flow,mitmproxy,ctx,HTTPS,数据包
来源: https://www.cnblogs.com/N3ptune/p/16424295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有