行业资讯

Tiny RDM 添加解析proto

发布时间:2026/8/6 20:07:34
Tiny RDM 添加解析proto 我用的python解析,所以需要电脑安装python3脚本写一个脚本 xxx.pyimportsysimportjsonimportbase64importredefunescape_bytes(value):# Tiny RDM传入:# \x0A\x0F\x30resultre.sub(r\\x([0-9a-fA-F]{2}),lambdam:chr(int(m.group(1),16)),value)returnresult.encode(latin1)defread_varint(data,index):value0shift0whileTrue:bdata[index]index1value|(b0x7f)shiftifnotb0x80:breakshift7returnvalue,indexdefis_text(data):try:sdata.decode(utf-8)forcins:iford(c)32:returnFalsereturnTrueexcept:returnFalsedefparse_proto(data):result{}index0whileindexlen(data):tag,indexread_varint(data,index)fieldtag3wiretag7ifwire0:value,indexread_varint(data,index)elifwire2:length,indexread_varint(data,index)rawdata[index:indexlength]indexlengthifis_text(raw):valueraw.decode(utf-8)else:# 尝试嵌套protobuftry:valueparse_proto(raw)except:value{_hex:raw.hex()}else:value{_wire:wire}keystr(field)ifkeyinresult:ifnotisinstance(result[key],list):result[key][result[key]]result[key].append(value)else:result[key]valuereturnresultif__name____main__:try:iflen(sys.argv)2:print([RDM-ERROR])exit()valuesys.argv[1]dataunescape_bytes(value)resultparse_proto(data)json_textjson.dumps(result,indent2,ensure_asciiFalse)# Tiny RDM要求base64输出outputbase64.b64encode(json_text.encode(utf-8)).decode(utf-8)print(output)exceptExceptionase:print([RDM-ERROR])编译# 使用的 PyInstaller,若是没有,使用 pip install pyinstaller 安装# 打包pyinstaller--onefilexxx.py# 在dist文件夹中会有exe文件添加配置最好将自动解码关闭,否则普通的redis缓存也会被这个解析