Python计算IS-IS LSP校验和结果不符问题排查
IS-IS LSP校验和计算异常问题
我用Python计算IS-IS链路状态PDU(LSP)的校验和,该校验和遵循ISO 8473算法,但计算结果始终和预期值0xc7be不匹配。以下是我编写的代码:
待计算的LSP PDU二进制数据(预期校验和:0xc7be)
import struct LSP = b'\x01_\x04\xa0\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00*\xc7\xbe\x03\x07\x04\x00d\x00\x00\x01\x04\x03I\x00\x01\x81\x01\xcc\x84\x04\x02\x02\x02\x03\x86\x04\x02\x02\x02\x03\x87v\x00\x00\x00\x00`\x02\x02\x02\x03\x11\x03\x06p\x00\x00\x00\x00\x03\x04\x01 \x0b\x04\x02\x02\x02\x03\x00\x00\x00\x00`\x04\x04\x04\x02\x03\x04\x01\x80\x00\x00\x00\x00`\x17\x17\x17\x01\x11\x03\x06p\x00\x00\x00\x00r\x04\x01 \x0b\x04\x02\x02\x02\x03\x00\x00\x00\n^\xc0\xa8!\x04\x03\x04\x01\x00\x00\x00\x00\n^\xc0\xa8!\x0c\x03\x04\x01\x00\x00\x00\x00\n^\xc0\xa8!\x10\x03\x04\x01\x00\x00\x00\x00\nX\xc0\xa8M\x03\x04\x01\x00\x89\x05vsim3\xf2#\x02\x02\x02\x03\x00\x02\t\x80\x00\x07\xd1\x01\x03\x00>\x80\x16\t\x00\x00\x03\xe8\x01\x03\x00:\x98\x17\x02\x01\n\x13\x02\x00\x01\x16\x833333\"\"\x00\x00\x00\nx\x04\x08\x00\x00\x00\x0e\x00\x00\x024\x06\x04\xc0\xa8M\x12\x08\x04\xc0\xa8M\x11\x03\x04\x00\x00\x00\x00\t\x04L\xeek(\n\x04\x00\x00\x00\x00\x0b \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x03\x00\x00\n\xfc \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x050\x00\x00]\xc3' # 根据ISO10589,校验和从LSDP-ID字段开始计算,初始化切片计数器 leftcounter = 4 rightcounter = 5 # 初始化校验和计算变量C0、C1 C0 = 0 C1 = 0 L = len(LSP) Octet = None while rightcounter <= L: # 如果当前字节是校验和字段,将Octet设为0 if 16 <= leftcounter <= 17: print(LSP[leftcounter:rightcounter]) Octet = 0 else: Octet = struct.unpack("B", LSP[leftcounter:rightcounter])[0] C0 = (C0 + Octet) % 255 C1 = (C1 + C0) % 255 leftcounter += 1 rightcounter += 1 print(L) X = ((L - 8) * C0 - C1) % 255 Y = ((L - 7) * (-1) * C0 + C1) % 255 # 若计算结果为0,替换为255 if X == 0: X = 255 if Y == 0: Y = 255 print(hex(X)) print(hex(Y))
内容的提问来源于stack exchange,提问作者Paolo
相关产品推荐
相关产品推荐

