怎么定制输出response body
返回的response body是加密的,我想要对指定 host返回的进行解密显示,但返回的依然是加密的数据。这样就不会影响正常的流程,也可以直观的看到返回的数据。方便定位问题。
Hi @myqqai
请问你的输出是输出到最终浏览器还是仅仅作为log打印?
rule中的replaceServerResData, 示例 可否为你所用。
理想状态是浏览器
什么叫「加密」?
https的话找找shouldInterceptHttps接口呗。
其实就是想把服务返回的数据做下处理浏览器展示,但返回的数据依然是原始数据(比如说返回的是Unicode码,然后我转成中文浏览器展示,但serverResData依然返回原始信息)
@myqqai
“serverResData依然返回原始信息”
这里面的原始信息你是指服务器自己的Unicode编码,还是说基于http传输时获取到的Buffer字符串内容?
如果是服务器的Unicode编码,你可以再次进行解码再返回;如果是Buffer字符串(默认传入replaceServerResData中的参数就是buffer,你可以通过buffer.toString()来获取原始返回),可参考示例
@myqqai 最近我也遇到了类似需求:requestBody和responseBody都是经过密钥加密的。 我的解决方案是,部署三套anyproxy, 比如A, B和C A负责把request解密,response加密;然后用端口转发工具(或其他方法)把request转发给B。用某种方式把B的request转发到C上。C负责把request加密,response解密。这样B的request和response都是明文。浏览器或者手机设置代理到A上。我们只需要访问B就可以看到所有的明文http报文。 这是我思考了一段时间的解决方案,目前还没时间实践,不知可行不可行,等我实践过后再回来留个言。
另外一个方案是直接改anproxy,但是这对使用者的素质要求比较高。我没有选这个方案,原因是: 一、技术积累不够 二、不通用,之后有可能涉及到维护。目前的趋势是能够通过架构(方案一)解决的问题一般不用自己开发(我观察得到的观点)。 三、时间成本不一定比方案一少,万一改完不稳定或者不能用,那不完蛋了吗。
所以我会多花点时间折腾方案一,实在不行,再回过头来考虑其他方案。目测方案一没有可能会失败吧 (:-0
AnyProxy 4.0里倒是可以拿到原始的返回,但这主要是解决观测gzip一类的问题,而不是你们这种“中间看一眼,然后塞回去,客户端毫无感知”的场景。
如果你们中间要解开请求,客户端一定是会有感知的(因为有证书替换的过程),除非拿到服务端的私钥。
@myqqai 最近我也遇到了类似需求:requestBody和responseBody都是经过密钥加密的。 我的解决方案是,部署三套anyproxy, 比如A, B和C A负责把request解密,response加密;然后用端口转发工具(或其他方法)把request转发给B。用某种方式把B的request转发到C上。C负责把request加密,response解密。这样B的request和response都是明文。浏览器或者手机设置代理到A上。我们只需要访问B就可以看到所有的明文http报文。 这是我思考了一段时间的解决方案,目前还没时间实践,不知可行不可行,等我实践过后再回来留个言。
另外一个方案是直接改anproxy,但是这对使用者的素质要求比较高。我没有选这个方案,原因是: 一、技术积累不够 二、不通用,之后有可能涉及到维护。目前的趋势是能够通过架构(方案一)解决的问题一般不用自己开发(我观察得到的观点)。 三、时间成本不一定比方案一少,万一改完不稳定或者不能用,那不完蛋了吗。
所以我会多花点时间折腾方案一,实在不行,再回过头来考虑其他方案。目测方案一没有可能会失败吧 (:-0
话说你解决了吗。
抓包后,只需要抓包工具web端的body 显示加密后的明文,不对请求做任何的处理。就是说,脚本支不支持,只修改抓包软件展示端的body等信息
@myqqai 最近我也遇到了类似需求:requestBody和responseBody都是经过密钥加密的。 我的解决方案是,部署三套anyproxy, 比如A, B和C A负责把request解密,response加密;然后用端口转发工具(或其他方法)把request转发给B。用某种方式把B的request转发到C上。C负责把request加密,response解密。这样B的request和response都是明文。浏览器或者手机设置代理到A上。我们只需要访问B就可以看到所有的明文http报文。 这是我思考了一段时间的解决方案,目前还没时间实践,不知可行不可行,等我实践过后再回来留个言。 另外一个方案是直接改anproxy,但是这对使用者的素质要求比较高。我没有选这个方案,原因是: 一、技术积累不够 二、不通用,之后有可能涉及到维护。目前的趋势是能够通过架构(方案一)解决的问题一般不用自己开发(我观察得到的观点)。 三、时间成本不一定比方案一少,万一改完不稳定或者不能用,那不完蛋了吗。 所以我会多花点时间折腾方案一,实在不行,再回过头来考虑其他方案。目测方案一没有可能会失败吧 (:-0
话说你解决了吗。
不好意思回的比较晚 Anyproxy有两年没更新了,应该是人散了没人维护了,而且之前用anyproxy遇到过一些问题,已经放弃,现在在用 https://github.com/mitmproxy/mitmproxy 之前用ABC那个方案折腾过程中遇到很多问题已经放弃了,现在用mitmproxy实现了一下方案二,已经完成了,代码写的不多,当然和你的加密方式有关,现在我们加密方式是对称加密,密钥是固定的很好处理,如果你们是非对称加密可能要多花些功夫 看了下你的需求,和我的差不多,都是只修改展示层面的,实际的请求流不动,这个可以实现,如果想要用anyproxy实现的话,应该也是可以的,anyproxy和mitmproxy整个架构应该是类似的,应该都有修改的地方