coding: utf-8
import struct
def receiveOnePing(mySocket, ID):
if mySocket is None:
return None
# ********* Begin *********#
# 接收数据,并提取出ICM报文头部,它位于第21到第28个字节
# 解析头部,获取五元组
# 若类型为0,并且五元组zhonghuoqu的ID与输入ID相同,说明成功得到pong报文,这时获取TTL
# TTL位于第9个字节,我们也需要对其进行解析
packet, addr = mySocket.recvfrom(1024)
header = packet[20: 28]
type, code, checksum, packetID, sequence = struct.unpack("!bbHHh", header)
if type == 0 and packetID == ID:
ttl = ord(struct.unpack("!c", packet[8:9])[0].decode())
# ********* End *********#
return type, code, checksum, packetID, sequence, ttl