如何反序列化HBase数据包应用层数据

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "Client.pb-c.h"
#include "Cell.pb-c.h"
#include "Comparator.pb-c.h"
#include "Filter.pb-c.h"
#include "HBase.pb-c.h"
#include "MapReduce.pb-c.h"
// get 'stu2','rk01'
char packet_bytes[] = {
  /*0x00,0x00,0x66,0x0f,*/ 0x08,0x04,0x1a,0x03,0x47,0x65,0x74,0x20,0x01,0x30,0x38,0xe0,0xd4,0x55,0x0a,0x39,0x08,0x12,0x35,0x73,0x75,0x32,0x2c,0x31,0x37,0x33,0x34,0x2e,0x61,0x63,0x64,0x62,0x18,0x72,0x6b,0x2a,0x0c,0x10,0xff,0x7f,0x01
};
//Hbase__Pb__GetRequest Hbase__Pb__GetRequest *  hbase__pb__get_request__unpack
//void   hbase__pb__get_request__free_unpacked
int main()
{
     int buf_len;
     Hbase__Pb__GetRequest *message; // or Hbase__Pb__Get *message; ->result is unpacked failed 
     buf_len = sizeof(packet_bytes);    
     if ((message = hbase__pb__get_request__unpack(NULL,buf_len,packet_bytes)) == NULL)
     {
         printf("unpacked failed,buf_len = %d\n",buf_len);
         goto err;
     }   
     hbase__pb__get_request__free_unpacked(message,NULL);
     return 0;

err:
    free(buf);
    return -1;
}

运行它,我得到:

echo -e -n "\x08\x04\x1a\x03\x47\x65\x74\x20\x01\x30\x00\x38\xe0\xd4\x03\x55\x0a\x39\x08\x01\x12\x35\x73\x74\x75\x32\x2c\x2c\x31\x35\x37\x39\x30\x37\x31\x33\x35\x35\x38\x34\x38\x2e\x38\x34\x61\x33\x65\x39\x38\x63\x65\x63\x30\x32\x39\x39\x65\x64\x35\x66\x30\x61\x33\x66\x39\x61\x63\x34\x66\x35\x39\x62\x38\x37\x2e\x12\x18\x0a\x04\x72\x6b\x30\x32\x2a\x0c\x08\x00\x10\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x30\x01\x38\x01" |protoc --decode_raw 
1: 4
3: "Get"
4: 1
6: 0
7: 60000
10: 0x0108390a
2: "stu2,1579071355848.84a3e98cec0299ed5f0a3f9ac4f59b87."
2 {
  1: "rk02"
  5 {
    1: 0
    2: 9223372036854775807
  }
  6: 1
  7: 1
}

*。proto文件在此处https://github.com/apache/hbase/tree/master/hbase-protocol/src/main/protobuf; 有效负载有106个字节,前4个字节是其他字节的长度。 我不知道哪些数据可用于反序列化。 我走错了路吗?

zc5210528 回答:如何反序列化HBase数据包应用层数据

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2632817.html

大家都在问