You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:30:49