def run(self): global taskQueue, stopFlag while True: if stopFlag: print("WorkThread Ended") break try: data, addr, recvTimestamp = taskQueue.get(timeout=1) recvPacket = NTPPacket() recvPacket.from_data(data) # Server mode - 4 and SNTP v4 sendPacket = NTPPacket(version=4, mode=4) # According to rfc4330 most fields == 0 # it is already set in NTPPacket constructor # Timestamp Name ID When Generated # ------------------------------------------------------------ # Originate Timestamp T1 time request sent by client # Receive Timestamp T2 time request received by server # Transmit Timestamp T3 time reply sent by server # Destination Timestamp T4 time reply received by client timeStamp_high, timeStamp_low = recvPacket.GetTxTimeStamp() sendPacket.SetOriginTimeStamp(timeStamp_high, timeStamp_low) # Simulate that we have different time on server sendPacket.recv_timestamp = recvTimestamp - self.lie_offset sendPacket.tx_timestamp = ntp_packet.system_to_ntp_time( time.time() - self.lie_offset) # Dummy info to be a correct sntp packet sendPacket.stratum = 2 sendPacket.ref_timestamp = recvTimestamp - 5 sendPacket.poll = 10 # sendPacket.precision = 2 # sendPacket.root_delay = 1 # sendPacket.root_dispersion = 1 # sendPacket.ref_id = 1809582983 # ip 107.220.11.135 # sendPacket = b"\x24\x02\x03\xee\x00\x00\x00\x37\x00\x00\x05\x0f\x6b\xdc\x0b\x87\xd8\xe7\x2f\xa6\x1a\xb4\xc9\x72\xd8\xe7\x30\x27\x66\x15\xdb\x33\xd8\xe7\x30\x26\x02\xe6\xcb\x21\xd8\xe7\x30\x26\x02\xeb\x94\xac" self.m_socket.sendto(sendPacket.to_data(), addr) print("Sended to {}:{}".format(addr[0], addr[1])) except Empty: continue