用python验证IP包中的校验和

2024-06-16 16:38:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要验证IP包的校验和头。到目前为止,我使用了论坛上发布的函数checksum,我想我应该得到的结果是一个cero(使用header和checksum),但是我得到了29574。我设法在不同的变量中解析包,将头和数据分开,将它们放入一个列表中,然后从头和校验和中生成一个只包含数据的新字符串。我需要知道我做错了什么。是我正在创建的字符串还是如何在校验和函数中使用字符串?在

这是我的代码:

#Verifying if checksum of packet is correct
    str_header=''.join(str(header))
    print checksum(str_header)

#Reference:http://stackoverflow.com/questions/1767910/checksum-udp-calculation-python
def carry_around_add(a, b):
    c = a + b
    return (c & 0xffff) + (c >> 16)

def checksum(msg):
    s = 0
    w = 0
    for i in range(0, len(msg), 2):
        w = ord(msg[i]) + (ord(msg[i+1]) << 8)
        s = carry_around_add(s, w)
    return ~s & 0xffff

列表标题包含以下信息:

^{pr2}$

谢谢


Tags: 数据函数字符串add列表returndefmsg