首页 > 其他分享 >protobuf 随笔记录

protobuf 随笔记录

时间:2024-07-23 10:08:09浏览次数:16  
标签:int32 protobuf pb3 记录 bytes message 随笔 type name

一:抓包,将得到的protobuf数据的hex保存为bin文件,后续使用一下代码,将得到的乱码数据打印出来对应的类型
import blackboxprotobuf
with open("pb.bin", "rb") as f:
data = f.read()
parsed_data = blackboxprotobuf.decode_message(data)

二:得到的类型数据如下:
({'1': 1, '2': 20, '3': 7, '6': {'1': b'csyh_yingyongbao', '2': b'cn.dylovemm.csyh', '3': b'4.79.4(c371).20240202-11:21:34', '4': b'AC3743A8AAA1', '5': b'b4dfadd0-ec97-8b8d-24f0-ec4cf3224c5b', '6': 1, '7': b'9', '10': 2, '11': {}, '12': b'20240516192210c500d0f4018094081117621732c7342201d349bdc12a047d', '14': b'b4dfadd0-ec97-8b8d-24f0-ec4cf3224c5b', '15': b'Pixel', '16': 1, '18': 1565, '21': {}, '22': b'Pixel', '24': b'eca6f6fbac727eb0', '25': 2}}, {'1': {'type': 'int', 'name': ''}, '2': {'type': 'int', 'name': ''}, '3': {'type': 'int', 'name': ''}, '6': {'type': 'message', 'message_typedef': {'1': {'type': 'bytes', 'name': ''}, '2': {'type': 'bytes', 'name': ''}, '3': {'type': 'bytes', 'name': ''}, '4': {'type': 'bytes', 'name': ''}, '5': {'type': 'bytes', 'name': ''}, '6': {'type': 'int', 'name': ''}, '7': {'type': 'bytes', 'name': ''}, '10': {'type': 'int', 'name': ''}, '11': {'type': 'message', 'message_typedef': {}, 'name': ''}, '12': {'type': 'bytes', 'name': ''}, '14': {'type': 'bytes', 'name': ''}, '15': {'type': 'bytes', 'name': ''}, '16': {'type': 'int', 'name': ''}, '18': {'type': 'int', 'name': ''}, '21': {'type': 'message', 'message_typedef': {}, 'name': ''}, '22': {'type': 'bytes', 'name': ''}, '24': {'type': 'bytes', 'name': ''}, '25': {'type': 'int', 'name': ''}}, 'name': ''}})
是一个tuple元组,拿出其中的数据,前面的数据为正常的参数数据,后面的为对应的数据类型,开始编写,test.proto文件,如下:

syntax = "proto3"; // 定义proto的版本

//对应的是第一层的循环数据
message TopicBody {
int32 a1 = 1; // page翻页
int32 a2 = 2; // init返回数据的大小
int32 a3 = 3; // 不知道是啥
TopicBodyKey a6 = 6; // 不知道啥
}
//对应的是方法a6里面的参数定义
message TopicBodyKey {
bytes b1 = 1;
bytes b2 = 2;
bytes b3 = 3;
bytes b4 = 4;
bytes b5 = 5;
int32 b6 = 6;
bytes b7 = 7;
int32 b10 = 10;

  TopicBodyKey11 b11 = 11; 

  bytes b12 = 12; 
  bytes b14 = 14; 
  bytes b15 = 15; 
  int32 b16 = 16; 
  int32 b18 = 18; 

  TopicBodyKey21 b21 = 21; 


  bytes b22 = 22; 
  bytes b24 = 24; 
  int32 b25 = 25; 

}
//对应a6里面的参数对应
message TopicBodyKey11 {}
message TopicBodyKey21 {}

执行命令:protoc ./test.proto --python_out=./ 第一个为文件路径,第二个为存储路径,执行完成后目录下得到:test_pb2.py
新建py文件,导入该文件,根据规则开始编写数据需要一一对应::
import test_pb2 as pb2

pb1 = pb2.TopicBody() //定义的第一个方法名称,对下面的参数赋值
pb1.a1 = 1
pb1.a2 = 20
pb1.a3 = 7

pb3 = pb2.TopicBodyKey() //定义的第二个方法名称,对下面的参数赋值
pb3.b1 = b'csyh_yingyongbao'
pb3.b2 = b'cn.dylovemm.csyh'
pb3.b3 = b'4.79.4(c371).20240202-11:21:34'
pb3.b4 = b'AC3743A8AAA1'
pb3.b5 = b'b4dfadd0-ec97-8b8d-24f0-ec4cf3224c5b'
pb3.b6 = 1
pb3.b7 = b'9'
pb3.b10 = 2

pb4 = pb2.TopicBodyKey11() //定义的第二个方法名称,对下面的参数赋值
pb3.b11.CopyFrom(pb4) //将该定义赋值给前面方法内部定义的对应参数

pb3.b12 = b'20240516192210c500d0f4018094081117621732c7342201d349bdc12a047d'
pb3.b14 = b'b4dfadd0-ec97-8b8d-24f0-ec4cf3224c5b'
pb3.b15 = b'Pixel'
pb3.b16 = 1
pb3.b18 = 1565

pb5 = pb2.TopicBodyKey21()
pb3.b21.CopyFrom(pb5)

pb3.b22 = b'Pixel'
pb3.b24 = b'eca6f6fbac727eb0'
pb3.b25 = 2

pb1.a6.CopyFrom(pb3)
//将数据格式化
req_bytes_string = pb1.SerializeToString()
//作为data参数传递即可
res = requests.post(url, data=req_bytes_string, verify=False, headers=headers)

标签:int32,protobuf,pb3,记录,bytes,message,随笔,type,name
From: https://www.cnblogs.com/blogwbk/p/18317602

相关文章

  • 基于Memotrace(留痕)、jieba、wordcloud、cnsenti的微信聊天记录分析(一)(环境准备+词
     创作背景在数字化时代,社交媒体和即时通讯工具已成为人们日常生活中不可或缺的一部分。微信,作为中国最流行的即时通讯软件之一,不仅承载了人们的日常交流,更记录了无数情感的起伏与心灵的触碰。小明,一个对生活充满好奇与热情的年轻人,最近通过微信结识了一位特别的女生——小芳......
  • 使用 json 配置文件进行 Python 日志记录
    我玩弄了日志模块,发现了一些我不太清楚的事情。首先,因为这是一个大程序,我希望代码尽可能简单,因此我使用了json配置文件.{"version":1,"disable_existing_loggers":false,"formatters":{"simple":{"format":"%(asctime)s-%(name)s......
  • 跳过 Python Spark Pyspark Databricks 未知字段异常中的不良记录
    我想知道是否有人知道如何跳过我们从json文件获取的记录这是错误[UNKNOWN_FIELD_EXCEPTION.NEW_FIELDS_IN_RECORD_WITH_FILE_PATH]在解析过程中遇到未知字段:这是失败的代码sent=spark.readStream.format('cloudFiles')\.option('cloudFiles.format','json')......
  • Unity学习记录01:unity2D 控制玩家移动的代码
    学unity搞东西肯定要会控制玩家移动啦,具体学习是参考了b站up主托尔的小lin,再结合我自己的经验总结出来的方法。【Unity2D游戏开发教程】第1课:2D俯视角角色如何移动?_哔哩哔哩bilibilihttps://www.bilibili.com/video/BV14j411j7Un/?spm_id_from=333.999.0.0&vd_source=d6fc444a0......
  • 2024/7/22 模拟赛记录
    这次的模拟赛比较简单。150T1:100T2:30T3:0T4:20T1:【题目描述】给定两个字符串a,b,从a中选一段前缀,b中选一段后缀(前后缀都可以为空),并将选出的后缀拼在选出的前缀后面。你需要求出有多少种本质不同的串(可以为空)场上思路:上来直接敲了个扩展kmp,仔细读题后发现这道题和kmp......
  • 记录--进度条真的是匀速的,不信你看
    ......
  • 踩坑记录:windows11下使用 VS2022 和 PCL1.14.1 配置点云开发环境
    闲话不多说,具体在windows下下载PCL与解压pcl可以看https://www.yuque.com/huangzhongqing/pcl/这位大佬的文章,那我就具体说一下踩过点坑:踩坑点1:按照大佬的文章的步骤进行解压与下载,我的PCL环境下在了K盘中,但是最后不知怎么的我的openni2文件夹下在了C盘里,也就是说3rdparty文件夹......
  • k8s service-node-port-range ip_local_reserved_ports 记录
    在Kubernetes中,ServiceNodePortRange是一个用于指定NodePort服务端口范围的参数。该参数定义了可以分配给NodePort服务的端口范围。默认情况下,NodePort服务使用的端口范围是30000到32767。如何查看k8sServiceNodePortRangek8smaster节点上的kube-apiserver进程......
  • labelImg数据标注工具安装使用,快捷键,菜单栏设置记录(不闪退)
    1,启动AnacondaPrompt终端  2,创建虚拟环境输入condacreate-nmyenv(代表环境名称)python=3.6 (使用Python的版本)推荐为安装labelImg创建一个独立的虚拟环境(我安装python版本是3.6后面不会闪退。)condacreate-nmyenvpython=3.63,查看环境condaenvlist4,激......
  • ImportError:无法从“google.protobuf”导入名称“runtime_version”
    PSD:\RealTimeObjectDetection>pythonTensorflow/models/research/object_detection/model_main_tf2.py--model_dir=Tensorflow/workspace/models/my_ssd_mobnet--pipeline_config_path=Tensorflow/workspace/models/my_ssd_mobnet/pipeline.config--num_train_step......