【概要篇】我是怎么实现全球任意地点控制局域网测试设备的http网络请求
嗯,标题起的有点过了~
最近因公司项目需要,搭建了一个代理测试环境,主要目的是用于控制局域网的测试设备(基于安卓板开发的项目APP)的每一个api接口请求在不同后端响应情况下的表现,在这个环境下可以通过一个外网url准实时接收测试设备发起的请求,然后进行相应的控制。其实想要做到这一点也可以手动在抓包软件进行一些操作,但是我司的设备是一个体积比较大的设备,如果这样做就得抓包软件常开断点人来回跑着处理,不够优雅!
因为本篇只是概要介绍,不会贴出相关实现代码,只是给出我真实的环境搭建情况及原理介绍。
一、搭建的准备工作
1、安卓设备安装Postern代理转发软件,因为这个安卓板是物理网线接入网络的,没有wifi这种可直接设置代理的入口。因为是测试版本且安卓版本较高又不想安装证书,直接让开发打包使用http请求,如果正式环境就需要https了。
2、与安卓设备处于同一局域网的PC电脑,安装burpsuite、fiddler、mitmproxy(含python环境)。理论上只要安装mitmproxy就可以了,核心功能都是它来完成的。我之所以还安装了bp和fd是因为平时还有其他测试需求,有些情况下需要频繁重发请求以及记录所有请求详细信息的需求所以也算是bp、fd各取所需了。如果是https请求可以只给客户机安装一个bp证书就可以了,bp上级可以接其他的代理软件,否则客户机还得安装fd或别的代理软件的证书。
3、一个可以外网访问的web服务器以及mysql数据库。这个web服务器用于对外提供api请求以及h5页面,方便操作控制测试设备的http请求。
二、通过外网控制http请求的实现框架图
整个实现流程图如下,在设计中本想使用websocket来更好地实现http请求控制的实时性,但是考虑到时间成本及实际情况基于轮询的解决方案已经能够很好地满足需求来(毕竟只是个位数的人来测试用)
h5主要做了6种返回mitmproxy的控制方式:
1、通过:直接放行请求不做任何处理
2、延迟:会对该请求在mitmproxy脚本的response响应中进行30秒延时,这个主要用于模拟请求超时的情况,这种请求请求实际以及到达目标地址,只是客户端为了体验可能5秒没结果就会当成失败处理(当然,如果是重要业务http请求接口超时肯定是不能直接当成失败处理的)。
3、502:用于模拟请求响应502状态码,如果客户端请求框架逻辑没处理好这个可能导致app崩溃
4、500:用于模拟请求响应500状态码
5、text:用于模拟普通文本返回的情况,用于监测客户端对返回信息无法json解析时如何处理
6、Fjson:用于返回一个非约定的json,模拟客户端json解析成功但是无法取到所需键值key的情况。为什么还要有这样一种情况呢,因为实际操作中发现有些项目网关报错的json与业务报错的json并没有完全统一。
三、这种测试环境能做什么
1、当你的测试设备 跟你PC机不在一起时,可以节省跑路的时间,而且大部分客户端可能超时时间也就5-10秒就算你愿意跑路可能也来不及处理测试设备就报错误代码了。
2、通过mitmproxy可以筛选及加工你关注的信息在h5上面显示出来,提前把你不想要处理/关注的http接口在python脚本里面过滤掉。这样h5上面就很干净,显示的都是你需要特别处理的http请求
3、试想一下如果这个架构中的PC基本如果本身就是一个windows服务器而且带有外网ip呢?是不是就可以完成下面这种场景的任务:任何一个客户端设备把代理信息设置为这个服务器的代理IP+端口,然后客户端设备的每个请求都会经过本服务器控制! 所以可想而知现在网上那些免费/收费代理其实并不安全,也不要寄希望于可以隐藏身份……
基于互联网精神,在注明出处的前提下本站文章可自由转载!
本文链接:https://ranjuan.cn/myphone-controls-local-android-requests/
微信赞赏支付宝赞赏
发表评论