Beispiel #1
0
    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