Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 理解protobuff协议_Python_Http_Python Requests_Protocol Buffers_Mitmproxy - Fatal编程技术网

Python 理解protobuff协议

Python 理解protobuff协议,python,http,python-requests,protocol-buffers,mitmproxy,Python,Http,Python Requests,Protocol Buffers,Mitmproxy,我只是在做一些逆向工程练习,并且已经运行了应用程序/x-protobuff协议。。 我目前正在使用mitmproxy嗅探来自redfin的网络呼叫。我看到了一个结果的端点,但是响应是内容类型为application/x-protobuff的非结构化JSON格式的数据。在做了一些研究之后,我发现protobuff使用一个模式在内部映射数据,我假设该模式也位于客户端的某个地方,称为.proto文件 为了验证我对截图的假设 我可以看到有一个名为X-ProtoBuf-Schema的响应头,它是schm

我只是在做一些逆向工程练习,并且已经运行了
应用程序/x-protobuff
协议。。 我目前正在使用mitmproxy嗅探来自redfin的网络呼叫。我看到了一个结果的端点,但是响应是内容类型为
application/x-protobuff
的非结构化JSON格式的数据。在做了一些研究之后,我发现protobuff使用一个模式在内部映射数据,我假设该模式也位于客户端的某个地方,称为
.proto
文件

为了验证我对截图的假设

我可以看到有一个名为
X-ProtoBuf-Schema
的响应头,它是schma所在的位置,与我可以用来解密响应数据的模式相同吗?我将如何继续以更结构化的方式读取这些数据

我可以使用对该端点的请求发出请求,只需给我protobuffers

PS:这就是JSON格式的样子

“我假设模式也位于客户机的某个地方,称为.proto文件。”-我根本不会假设;客户端一旦构建,就不需要.proto——生成的代码被用来代替任何显式模式。如果一个站点正在发布一个模式,那么它可能是google/protobuf/descriptor.proto中的一个序列化的
FileDescriptorSet
,它包含.proto的意图,但作为数据。

So-从服务器端来说,他们所做的是使用服务器中定义的.proto模式,假设它在服务器端生成一个生成的代码,然后提供给客户端进行进一步的反序列化?因此,从技术上讲,为了正确理解JSON是如何构造的,我必须找到生成的代码并使用它来反序列化数据?为了给您上下文-我最初的方法是获取IPA文件并查找.proto文件,然后在python中使用它来反序列化来自redfin的数据。但似乎给定IPA文件,我会使用hopper或某种类似的分解器,试图找到
生成的代码
,然后基本上模仿生成的代码来反序列化任何进一步的protobuffer数据?@hoopla你说模式URL有protobuf吗?这就是模式,而不是文本形式。但是:您也可以要求提供模式。我已经反向设计了许多模式,并且有工具可以提供帮助,但是:我的工具基于二进制格式,而不是JSON格式。我不确定我是否遵循,但我的目标是以更可读的格式阅读我在SS上发布的响应。我认为使用.proto模式是最好的方法。响应基本上是JSON,但我看到内容类型是protobuf。你是说JSON响应本身就是模式吗?但是为什么它看起来是非结构化的呢?我没有看到公共键值对。我该如何做到这一点呢?Marc Gravell,这是我试图构建的JSON数据。通常,程序和应用程序从不包含.proto文件。此文件用于生成protobuf模型类(源代码),其中包括din客户端和服务器应用程序。如果要重新生成.proto文件,必须手动对应用程序进行反向工程。在仍然使用protobuf2的旧时代,Android应用程序包含许多关于原始.proto文件的信息(例如字段名和其他名称),但是现在使用protobuf3生成的最小化模型类并不包含原始.proto文件的太多数据。