我正在研究老师为我的网络课程提供的程序。假定使用ICMP对服务器执行Ping操作。但是,该程序无法正常工作。我已经用WireShark运行它,它说校验和字节未正确返回。显然,这适用于我的其他同学,但不适用于我。对于那些可能会说“问您的教授”的人,我已经尝试了一段时间了,但是我还无法与他见面。这是实现校验和的功能。
def checksum(string):
csum = 0
countTo = (len(string) // 2) *2
count = 0
while count < countTo:
thisVal = ord(strin[count+1]) *256 + ord(string[count])
csum = csum + this Val
csum = csum & 0xffffffff
count = count +2
if coutnTo < len(string):
csum = csum = ord(string[len(string) -1])
csum = csum & 0xffffffff
csum = (csumm >> 16) + (csum & 0xffff)
csum = csum + (csum >>16)
answer = ~csum
answer = answer & 0xffff
answer = answer >> 8 | (answer << 8 & 0xff00)
return answer
我还应该提到,他使用struct.pack来创建字符串参数:
header = struct.pack("bbHHh", ICMP_ECHO_REQUEST,0,0, ID,1)
data = struct.pack("d",time.time())
checksum(str(header+data))
如果重要的话,我也在Kali Vm中运行它。