code: def receive_one_ping(mySocket, myID, timeout):
      
      timeLeft = timeout/1000
  
      while True: # Loop while waiting for packet or timeout
          startedSelect = default_timer()
          whatReady = select.select([mySocket], [], [], timeLeft)
          howLongInSelect = (default_timer() - startedSelect)
          if whatReady[0] == []: # Timeout
              return None, 0, 0, 0, 0
  
          timeReceived = default_timer()
  
          recPacket, addr = mySocket.recvfrom(ICMP_MAX_RECV)
  
          ipHeader = recPacket[:20]
          iphVersion, iphTypeOfSvc, iphLength, \
          iphID, iphFlags, iphTTL, iphProtocol, \
          iphChecksum, iphSrcIP, iphDestIP = struct.unpack(
              "!BBHHHBBHII", ipHeader
          )
  
          icmpHeader = recPacket[20:28]
          icmpType, icmpCode, icmpChecksum, \
          icmpPacketID, icmpSeqNumber = struct.unpack(
              "!BBHHH", icmpHeader
          )
  
          if icmpPacketID == myID: # Our packet
              dataSize = len(recPacket) - 28
              #print (len(recPacket.encode()))
              return timeReceived, (dataSize+8), iphSrcIP, icmpSeqNumber, iphTTL
  
          timeLeft = timeLeft - howLongInSelect
          if timeLeft <= 0:
              return None, 0, 0, 0, 0
docs: Receive the ping from the socket. Timeout = in ms