Декодировать пакеты проводного протокола MongoDB из двоичных данных, полученных путем перехвата с использованием прокси-сервера - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь перехватить монго-пакеты, используя прокси-сервер.Я могу перехватить двоичные данные, но не могу декодировать их как сообщения протокола Mongo Wire, которые описаны в https://docs.mongodb.com/manual/reference/mongodb-wire-protocol

Двоичные данные, которые я получаю, выглядят так:

\xe0\x00\x00\x00i\x98<d\x00\x00\x00\x00\xdd\x07\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x02insert\x00\x06\x00\x00\x00dummy\x00\x08ordered\x00\x01\x03writeConcern\x00\x0c\x00\x00\x00\x10w\x00\x01\x00\x00\x00\x00\x03lsid\x00\x1e\x00\x00\x00\x05id\x00\x10\x00\x00\x00\x04\xc4*\xceT\x02,@\xe7\x98\xc4\xe7a\\\x03\xd4\x87\x00\x02$db\x00\x05\x00\x00\x00test\x00\x03$readPreference\x00\x17\x00\x00\x00\x02mode\x00\x08\x00\x00\x00primary\x00\x00\x00\x015\x00\x00\x00documents\x00'\x00\x00\x00\x07_id\x00\\\xac?\xd0\x8eB.?[\xbd\xf9\xec\x02string\x00\x05\x00\x00\x00test\x00\x00

Это данные, когда я сохраняю строку «test» в поле «string» в документе «Dummy»

Согласно протоколу проводов MongoDB, формат сообщения OP_INSERT

struct {
    MsgHeader header;             // standard message header
    int32     flags;              // bit vector - see below
    cstring   fullCollectionName; // "dbname.collectionname"
    document* documents;          // one or more documents to insert into the collection
}

Формат заголовка сообщения:

struct MsgHeader {
    int32   messageLength; // total message size, including this
    int32   requestID;     // identifier for this message
    int32   responseTo;    // requestID from the original request
                           //   (used in responses from db)
    int32   opCode;        // request type - see table below for details
}

Из приведенных выше двоичных данных я хочу извлечь сообщение (я) по протоколу Mongo Wire.Есть ли какой-нибудь пакет / библиотека для этого?

...