2017-10-29 4 views
2

Ich bin sezieren Nachrichten in LDAP-Client-Server-Kommunikation und Probleme zu verstehen, wie die Nachrichtenlänge berechnet wird.LDAP lange Nachricht Länge Darstellung

Basierend auf LDAP-Standards, wenn in ASN.1 jede Nachricht mit 0x30(ldap Nachricht Start) beginnt die Kommunikation und folgende Bytes sollten die Nachrichtenlänge (oder Zahl oder einen entsprechenden Bytes, die folgen) sein dort oben unbis ist 0x2 und 0x1 signalisieren die Nachrichten-ID. Das ist klar.

Kurz-Nachrichten können es wie folgt aussehen:

0x30 (start), 
0x3c (length), 
0x2  (msg id.. 
0x1 
0x1 ), 
... 

mit Länge 0x3c oder einfach 60 in Dezember zu sein, und die Anzahl der folgenden Bytes bis zum Ende der Nachricht ist in der Tat 60.

Etwas längere Nachricht kann wie folgt aussehen:

0x30 (start), 
0x81 (???), 
0x8e (length), 
0x2  (msg id.. 
0x1 
0x1 ), 
... 

mit der Länge wieder genau bei 0x8e (oder 142 in DEC), aber was bedeutet das vorherige Byte?

Noch längere Nachricht sieht wie folgt aus:

0x30 (start), 
0x82 (???), 
0x2  (???), 
0xe3 (???), 
0x2  (msg id.. 
0x1 
0x1 ), 
... 

weder mit 0x82, 0x2 oder 0xe3 (oder 130, 2 oder 227 in DEC) ist die tatsächliche Länge (das ist in der Tat 739)

und ich kann die Logik zwischen den beiden letzten Beispielen nicht sehen. Wie ist die Länge im Code dargestellt?

Antwort

2

Es gibt zwei Möglichkeiten, Längen in ASN.1 zu codieren - die definitive Form und die unbestimmte Form.

Für die bestimmte Form, wenn die Länge weniger als 128 ist, verwenden Sie nur ein einzelnes Byte, mit dem High-Bit auf Null gesetzt. Ansonsten wird das High-Bit auf Eins gesetzt und die Low-Seven-Bits auf die Länge der Länge gesetzt. Die Länge wird dann in vielen Bytes codiert (in Big-Endian-Reihenfolge).

0x82 hat ein High-Bit von 1 und die verbleibenden Bits sind gleich 2, dh die folgenden 2 Bytes enthalten die Länge (0x02E3 = 739).

+0

Ich sehe, danke, das ist genau das, was ich wissen wollte. – toddddos

Verwandte Themen