diff --git a/scapy/contrib/cdp.py b/scapy/contrib/cdp.py index c8b7f106..7b1ff64d 100644 --- a/scapy/contrib/cdp.py +++ b/scapy/contrib/cdp.py @@ -102,7 +102,8 @@ def _CDPGuessPayloadClass(p, **kargs): class CDPMsgGeneric(Packet): name = "CDP Generic Message" fields_desc = [ XShortEnumField("type", None, _cdp_tlv_types), - FieldLenField("len", None, "val", "!H"), + FieldLenField("len", None, "val", "!H", + adjust=lambda pkt, x: x + 4), StrLenField("val", "", length_from=lambda x:x.len - 4) ] @@ -178,5 +179,6 @@ class CDPMsgAddr(CDPMsgGeneric): class CDPMsgPortID(CDPMsgGeneric): name = "Port ID" fields_desc = [ XShortEnumField("type", 0x0003, _cdp_tlv_types), - FieldLenField("len", None, "iface", "!H"), + FieldLenField("len", None, "iface", "!H", + adjust=lambda pkt, x: x + 4), StrLenField("iface", "Port 1", length_from=lambda x:x.len - 4) ] @@ -319,7 +319,7 @@ class _CDPChecksum: This padding is only used for checksum computation. The original packet should not be altered.""" if len(pkt) % 2: - last_chr = pkt[-1] + last_chr = pkt[len(pkt)-1:] if last_chr <= b'\x80': return pkt[:-1] + b'\x00' + last_chr else: