def _process_ntp_result(self, result: RawNTP): orig_digits = extract_64timestamp_fraction(result.origin_timestamp()) trans_digits = extract_64timestamp_fraction( result.transmit_timestamp()) ref_digits = extract_64timestamp_fraction(result.reference_timestamp()) rec_digits = extract_64timestamp_fraction(result.receive_timestamp()) self.log.info('Raw bits: ' + orig_digits + ' ' + trans_digits + ' ' + ref_digits + ' ' + rec_digits) for i in range(9): try: origin_n = int(orig_digits[i]) trans_n = int(trans_digits[i]) ref_n = int(ref_digits[i]) rec_n = int(rec_digits[i]) except: # Sometimes one of the pool servers does not respond with 4 valid timestamp fields. # In that case the response is skipped and another round is re-added. self.log.info( 'Experiment FAILED due to invalid server response. Increasing n by 1' ) self._n += 1 self._error_counter_response += 1 return if self._debug: self.log.info('Iteration bits ' + str(i) + ': ' + str(origin_n) + ' ' + str(trans_n) + ' ' + str(ref_n) + ' ' + str(rec_n)) self._origin_container[i][origin_n] += 1 self._ref_container[i][ref_n] += 1 self._rec_container[i][rec_n] += 1 self._trans_container[i][trans_n] += 1
def _process_ntp_result(self, result: RawNTP): orig_digits = extract_64timestamp_fraction(result.origin_timestamp()) trans_digits = extract_64timestamp_fraction( result.transmit_timestamp()) ref_digits = extract_64timestamp_fraction(result.reference_timestamp()) rec_digits = extract_64timestamp_fraction(result.receive_timestamp()) self.log.info('Raw bits: ' + orig_digits + ' ' + trans_digits + ' ' + ref_digits + ' ' + rec_digits) for i in range(9): origin_n = int(orig_digits[i]) trans_n = int(trans_digits[i]) ref_n = int(ref_digits[i]) rec_n = int(rec_digits[i]) self.log.debug('Iteration bits ' + str(i) + ': ' + str(origin_n) + ' ' + str(trans_n) + ' ' + str(ref_n) + ' ' + str(rec_n)) self._origin_container[i][origin_n] += 1 self._ref_container[i][ref_n] += 1 self._rec_container[i][rec_n] += 1 self._trans_container[i][trans_n] += 1
def init_ntp_pck(num_of_digits_to_fill_up: int = 12) -> NTP: """ Creates a new NTP package, fills all 4 64 bit timestamps with the current time and fills up the last bits with random values, since they are set to 0 by Scapy :param num_of_digits_to_fill_up: The amount of digits to fill up. :return: The newly created NTP package """ ntp = NTP() ntp.ref = ntp_time_now() ntp.sent = ntp_time_now() ntp.orig = ntp_time_now() ntp.recv = ntp_time_now() raw_ntp = RawNTP(ntp) f_ref = raw_ntp.reference_timestamp() f_trans = raw_ntp.transmit_timestamp() f_orig = raw_ntp.origin_timestamp() f_recv = raw_ntp.receive_timestamp() for i in range(num_of_digits_to_fill_up): pos = 64 - i f_ref = f_ref[:pos - 1] + str(random.randint(0, 1)) + f_ref[pos:] f_trans = f_trans[:pos - 1] + str(random.randint(0, 1)) + f_trans[pos:] f_orig = f_orig[:pos - 1] + str(random.randint(0, 1)) + f_orig[pos:] f_recv = f_recv[:pos - 1] + str(random.randint(0, 1)) + f_recv[pos:] assert len(f_ref) == 64 assert len(f_trans) == 64 assert len(f_orig) == 64 assert len(f_recv) == 64 raw_ntp.set_reference_timestamp(f_ref) raw_ntp.set_transmit_timestamp(f_trans) raw_ntp.set_origin_timestamp(f_orig) raw_ntp.set_receive_timestamp(f_recv) ntp = raw_ntp.ntp() return ntp