使用python对IP数据报头部进行校验。
源数据包:
python代码:
全局数组packet中放着20字节的IP数据报首部,校验和为零,通过程序处理将校验和填入packet数组。
packet=['45','00','00','3C','8C','AF','40','00','40','06',
'00','00',#校验位
'C0','A8','C9','83',#源IP
'C0','A8','C9','80',#目的IP
]
def DataCheck(Info):
Data=Info.split(" ")
sum=0
for i in Data:
sum=int('0x'+i,16)+sum
check=0xffff-((0x0000ffff&sum)+(sum>>16))
return check
if __name__ == '__main__':
IPH=''
for i in range(0,20):
if i%2==0 or i==19:IPH= IPH+packet[i]
else:IPH= IPH+packet[i]+' '
IPHcheck=DataCheck(IPH)
IPHcheck=str(hex(IPHcheck))[2:]
IPHcheck=IPHcheck.zfill(4)
packet[10]=IPHcheck[0:2].upper()
packet[11] =IPHcheck[2:4].upper()
print(packet)
输出:['45', '00', '00', '3C', '8C', 'AF', '40', '00', '40', '06', '99', 'B7', 'C0', 'A8', 'C9', '83', 'C0', 'A8', 'C9', '80']
校验和计算原理:https://blog.csdn.net/qq_42196196/article/details/83748044