anyproxy icon indicating copy to clipboard operation
anyproxy copied to clipboard

怎么定制输出response body

Open myqqai opened this issue 9 years ago • 10 comments

返回的response body是加密的,我想要对指定 host返回的进行解密显示,但返回的依然是加密的数据。这样就不会影响正常的流程,也可以直观的看到返回的数据。方便定位问题。

myqqai avatar Nov 13 '16 03:11 myqqai

Hi @myqqai 请问你的输出是输出到最终浏览器还是仅仅作为log打印? rule中的replaceServerResData, 示例 可否为你所用。

codingfishman avatar Nov 15 '16 04:11 codingfishman

理想状态是浏览器

myqqai avatar Nov 15 '16 11:11 myqqai

什么叫「加密」?

https的话找找shouldInterceptHttps接口呗。

ottomao avatar Nov 15 '16 11:11 ottomao

其实就是想把服务返回的数据做下处理浏览器展示,但返回的数据依然是原始数据(比如说返回的是Unicode码,然后我转成中文浏览器展示,但serverResData依然返回原始信息)

myqqai avatar Nov 15 '16 14:11 myqqai

@myqqai

“serverResData依然返回原始信息”

这里面的原始信息你是指服务器自己的Unicode编码,还是说基于http传输时获取到的Buffer字符串内容?

如果是服务器的Unicode编码,你可以再次进行解码再返回;如果是Buffer字符串(默认传入replaceServerResData中的参数就是buffer,你可以通过buffer.toString()来获取原始返回),可参考示例

codingfishman avatar Nov 18 '16 07:11 codingfishman

@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

friendlyfriendlier avatar Jul 28 '17 08:07 friendlyfriendlier

AnyProxy 4.0里倒是可以拿到原始的返回,但这主要是解决观测gzip一类的问题,而不是你们这种“中间看一眼,然后塞回去,客户端毫无感知”的场景。

如果你们中间要解开请求,客户端一定是会有感知的(因为有证书替换的过程),除非拿到服务端的私钥。

ottomao avatar Aug 01 '17 15:08 ottomao

@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

话说你解决了吗。

lanny8588 avatar Feb 10 '22 08:02 lanny8588

抓包后,只需要抓包工具web端的body 显示加密后的明文,不对请求做任何的处理。就是说,脚本支不支持,只修改抓包软件展示端的body等信息

lanny8588 avatar Feb 10 '22 08:02 lanny8588

@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整个架构应该是类似的,应该都有修改的地方

friendlyfriendlier avatar Sep 03 '22 08:09 friendlyfriendlier