Поясню что я понимаю под сложностью:
1. Наличие в протоколе полей, влияющих на порядок байт при вычитывании
2. Разные форматы интерпретации данных - например
ASCII,
UTF-*, etc.
3.
TLV блоки, которые содержат саб-блоки, а те ещё саб-блоки, итд;
4. Наличие массивов - например структура:
slotArraySize (4 bytes), (slot0 [1 byte], slot1 [1 byte], slot2 [1 byte])
0x03, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09
->
slotArray = [ {0x00, 0x01, 0x02}, { 0x03, 0x04, 0x05}, {0x07, 0x08, 0x09}];
5. Один и тот же блок может
диссектиться по разному исходя из версии блока; (например
PN-IO протокол,
PDIRData
имеет разную структуру зависимую от версии блока).
6. Диссектор протокола зависит от нижележащих протоколов. Например
PN-IO - диссектор может опираться на
UDP порты чтобы определить тип
payload-а, или на поле
Data Representation Format Label (
RPC).
7. Наличие полей не кратных двум. Например
MRP протокол -
OUI (
organizational unique id) имеет размер 3 байта.
Протокол может быть как открытый и широкораспространённый (
HTTP,
SCTP, etc.), так и индустриальный (
Bacnet,
Modbus,
Profinet protocol stack).
Возможно я не назвал другие критерии сложности - буду рад узнать.