在python中验证IP数据包中的校验和

时间:2013-05-07 23:42:17

标签: python checksum packet

我需要验证IP数据包的校验和标头。到目前为止,我使用了论坛中发布的函数校验和,我想我应该得到的结果是cero(使用头和校验和)但我得到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

列表标题包含以下信息:

Ver: 4
HL: 12
TOS: 0
LEN: 50
ID= 456
OFF: 16384
TTL: 5
PROT: 6
CHSUM: 12407
SRC: 16885952
DST: 167880896
rem_head: ['Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q', 'Q']
data: ['A', 'A']

感谢

0 个答案:

没有答案