เจนเฉเจฒเฉ, Habrausers. เจ
เฉฑเจ เจฎเฉเจ เจเจธ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ เจเจฟ เจคเฉเจนเจพเจกเฉ เจเจชเจฃเฉ เจธเจงเจพเจฐเจจ NTP เจเจฒเจพเจเฉฐเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเจพ เจนเฉ. เจ
เจธเจฒ เจตเจฟเฉฑเจ, เจเฉฑเจฒเจฌเจพเจค เจชเฉเจเฉเจ เจฆเฉ เจฌเจฃเจคเจฐ เจ
เจคเฉ NTP เจธเจฐเจตเจฐ เจคเฉเจ เจเจตเจพเจฌ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐเจจ เจฆเฉ เจตเจฟเจงเฉ เจตเฉฑเจฒ เจฎเฉเฉเฉเจเฉเฅค เจเฉเจก เจชเจพเจเจฅเจจ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจพเจตเฉเจเจพ, เจเจฟเจเจเจเจฟ เจเจน เจฎเฉเจจเฉเฉฐ เจเจพเจชเจฆเจพ เจนเฉ เจเจฟ เจ
เจเจฟเจนเฉเจเจ เจเฉเจเจผเจพเจ เจฒเจ เจเฉเจ เจฌเจฟเจนเจคเจฐ เจญเจพเจธเจผเจพ เจจเจนเฉเจ เจนเฉเฅค เจเฉเจจเฉเจเจธเจฐเจเจผ ntplib เจเฉเจก เจฆเฉ เจจเจพเจฒ เจเฉเจก เจฆเฉ เจธเจฎเจพเจจเจคเจพ เจจเฉเฉฐ เจจเฉเจ เจเจฐเจจเจเฉ - เจฎเฉเจ เจเจธ เจคเฉเจ "เจชเฉเจฐเฉเจฐเจฟเจค" เจธเฉเฅค
เจคเจพเจ เจ
เจธเจฒ เจตเจฟเฉฑเจ NTP เจเฉ เจนเฉ? NTP เจธเจนเฉ เจธเจฎเฉเจ เจฆเฉ เจธเจฐเจตเจฐเจพเจ เจจเจพเจฒ เจชเจฐเจธเจชเจฐ เจชเฉเจฐเจญเจพเจต เจฒเจ เจเฉฑเจ เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจนเฉเฅค เจเจน เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจเจงเฉเจจเจฟเจ เจฎเจธเจผเฉเจจเจพเจ เจตเจฟเฉฑเจ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจตเจฟเฉฐเจกเฉเจเจผ เจตเจฟเฉฑเจ w32tm เจธเฉเจตเจพเฅค
เจเฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจเฉ NTP เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจฆเฉ 5 เจธเฉฐเจธเจเจฐเจฃ เจนเจจเฅค เจชเจนเจฟเจฒเจพ, เจธเฉฐเจธเจเจฐเจฃ 0 (1985, RFC958)), เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจ เจชเฉเจฐเจพเจฃเจพ เจฎเฉฐเจจเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจนเฉเจฃ เจจเจตเฉเจ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจชเจนเจฟเจฒเจพ (1, RFC1988), เจฆเฉเจเจพ (1059, RFC2), เจคเฉเจเจพ (1989, RFC1119) เจ เจคเฉ เจเฉเจฅเจพ (3, RFC1992)เฅค เจธเฉฐเจธเจเจฐเจฃ 1305-4 เจเฉฑเจ เจฆเฉเจเฉ เจฆเฉ เจ เจจเฉเจเฉเจฒ เจนเจจ; เจเจน เจธเจฟเจฐเจซ เจธเจฐเจตเจฐ เจเจชเจฐเฉเจธเจผเจจ เจเจฒเจเฉเจฐเจฟเจฆเจฎ เจตเจฟเฉฑเจ เจตเฉฑเจเจฐเฉ เจนเจจเฅค
เจชเฉเจเฉเจ เจซเจพเจฐเจฎเฉเจ
เจฒเฉเจช เจธเฉเจเจ (เจธเฉเจงเจพเจฐ เจธเฉเจเจ) - เจเฉฑเจ เจธเฉฐเจเจฟเจ เจเฉ เจคเจพเจฒเจฎเฉเจฒ เจธเฉเจเจฟเฉฐเจก เจฌเจพเจฐเฉ เจเฉเจคเจพเจตเจจเฉ เจฆเจฐเจธเจพเจเจเจฆเฉ เจนเฉเฅค เจญเจพเจต:
- 0 - เจเฉเจ เจธเฉเจงเจพเจฐ เจจเจนเฉเจ
- 1 - เจฆเจฟเจจ เจฆเฉ เจเจเจฐเฉ เจฎเจฟเฉฐเจ เจตเจฟเฉฑเจ 61 เจธเจเจฟเฉฐเจ เจนเฉเฉฐเจฆเฉ เจนเจจ
- 2 - เจฆเจฟเจจ เจฆเฉ เจเจเจฐเฉ เจฎเจฟเฉฐเจ เจตเจฟเฉฑเจ 59 เจธเจเจฟเฉฐเจ เจนเฉเฉฐเจฆเฉ เจนเจจ
- 3 - เจธเจฐเจตเจฐ เจเจฐเจพเจฌเฉ (เจธเจฎเจพเจ เจธเจฎเจเจพเจฒเฉ เจจเจนเฉเจ เจนเฉ)
เจตเจฐเจเจจ เจจเฉฐเจฌเจฐ (เจตเจฐเจเจจ เจจเฉฐเจฌเจฐ) โ NTP เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจตเจฐเจเจจ เจจเฉฐเจฌเจฐ (1-4)เฅค
เจฎเฉเจก (เจฎเฉเจก) - เจชเฉเจเฉเจ เจญเฉเจเจฃ เจตเจพเจฒเฉ เจฆเจพ เจเจชเจฐเฉเจเจฟเฉฐเจ เจฎเฉเจกเฅค 0 เจคเฉเจ 7 เจคเฉฑเจ เจฆเจพ เจฎเฉเฉฑเจฒ, เจธเจญ เจคเฉเจ เจเจฎ:
- 3 - เจเจพเจนเจ
- 4 - เจธเจฐเจตเจฐ
- 5 - เจชเฉเจฐเจธเจพเจฐเจฃ เจฎเฉเจก
เจธเจเฉเจฐเฉเจเจฎ (เจฒเฉเจ
เจฐเจฟเฉฐเจ เจชเฉฑเจงเจฐ) - เจธเจฐเจตเจฐ เจ
เจคเฉ เจธเฉฐเจฆเจฐเจญ เจเฉเฉ เจฆเฉ เจตเจฟเจเจเจพเจฐ เจตเจฟเจเจเจพเจฐเจฒเฉ เจฒเฉเจ
เจฐเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ (1 - เจธเจฐเจตเจฐ เจนเจตเจพเจฒเจพ เจเฉเฉ เจคเฉเจ เจธเจฟเฉฑเจงเจพ เจกเจพเจเจพ เจฒเฉเจเจฆเจพ เจนเฉ, 2 - เจธเจฐเจตเจฐ เจฒเฉเจ
เจฐ 1, เจเจฆเจฟ เจตเจพเจฒเฉ เจธเจฐเจตเจฐ เจคเฉเจ เจกเจพเจเจพ เจฒเฉเจเจฆเจพ เจนเฉ)เฅค
เจชเฉเจฒ เจฒเจเจพเจคเจพเจฐ เจธเฉเจจเฉเจนเจฟเจเจ เจตเจฟเจเจเจพเจฐ เจตเฉฑเจง เจคเฉเจ เจตเฉฑเจง เจ
เฉฐเจคเจฐเจพเจฒ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจเฉฑเจ เจนเจธเจคเจพเจเจฐเจฟเจค เจชเฉเจฐเจจ เจ
เฉฐเจ เจนเฉเฅค NTP เจเจฒเจพเจเฉฐเจ เจเฉฑเจฅเฉ เจ
เฉฐเจคเจฐเจพเจฒ เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจฟเจค เจเจฐเจฆเจพ เจนเฉ เจเจฟเจธ 'เจคเฉ เจเจน เจธเจฐเจตเจฐ เจจเฉเฉฐ เจชเฉเจฒ เจเจฐเจจ เจฆเฉ เจเจฎเฉเจฆ เจเจฐเจฆเจพ เจนเฉ, เจ
เจคเฉ NTP เจธเจฐเจตเจฐ เจเจธ เจ
เฉฐเจคเจฐเจพเจฒ เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจฆเจพ เจนเฉ เจเจฟเจธ 'เจคเฉ เจเจน เจชเฉเจฒ เจเฉเจคเฉ เจเจพเจฃ เจฆเฉ เจเจฎเฉเจฆ เจเจฐเจฆเจพ เจนเฉเฅค เจฎเฉเฉฑเจฒ เจธเจเจฟเฉฐเจเจพเจ เจฆเฉ เจฌเจพเจเจจเจฐเฉ เจฒเจเฉเจเจฃเจ เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจนเฉเฅค
เจธเจผเฉเฉฑเจงเจคเจพ (เจธเจผเฉเฉฑเจงเจคเจพ) เจเฉฑเจ เจนเจธเจคเจพเจเจฐเจฟเจค เจชเฉเจฐเจจ เจ
เฉฐเจ เจนเฉ เจเฉ เจธเจฟเจธเจเจฎ เจเจฒเจพเจ เจฆเฉ เจธเจผเฉเฉฑเจงเจคเจพ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉเฅค เจฎเฉเฉฑเจฒ เจธเจเจฟเฉฐเจเจพเจ เจฆเฉ เจฌเจพเจเจจเจฐเฉ เจฒเจเฉเจเจฃเจ เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจนเฉเฅค
เจฐเฉเจ เจฆเฉเจฐเฉ (เจธเจฐเจตเจฐ เจฆเฉเจฐเฉ) - เจเฉเฉ เจฐเฉเจกเจฟเฉฐเจ เจจเฉเฉฐ NTP เจธเจฐเจตเจฐ เจคเฉฑเจ เจชเจนเฉเฉฐเจเจฃ เจฒเจ เจธเจฎเจพเจ เจฒเฉฑเจเจฆเจพ เจนเฉ, เจธเจเจฟเฉฐเจเจพเจ เจฆเฉ เจเฉฑเจ เจจเจฟเจธเจผเจเจฟเจค-เจชเฉเจเจเฉฐเจ เจธเฉฐเจเจฟเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจเฅค
เจฐเฉเจ เจซเฉเจฒเจพเจ
(เจธเจฐเจตเจฐ เจซเฉเจฒเจพเจ
) - เจเฉฑเจ เจจเจฟเจธเจผเจเจค เจฌเจฟเฉฐเจฆเฉ เจฆเฉ เจจเจพเจฒ เจเจ เจธเจเจฟเฉฐเจเจพเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ NTP เจธเจฐเจตเจฐ เจเจฒเจพเจ เจฐเฉเจกเจฟเฉฐเจ เจฆเจพ เจซเฉเจฒเจฃเจพเฅค
เจฐเฉเจซเจฐเฉ เจเจ.เจกเฉ (เจธเจฐเฉเจค เจชเจเจพเจฃเจเจฐเจคเจพ) - เจเฉเฉ เจเจ.เจกเฉ. เจเฉเจเจฐ เจธเจฐเจตเจฐ เจตเจฟเฉฑเจ เจธเจเฉเจฐเฉเจเจฎ 1 เจนเฉ, เจคเจพเจ เจฐเฉเจซ เจเจเจกเฉ เจชเจฐเจฎเจพเจฃเฉ เจเฉเฉ (4 ASCII เจ
เฉฑเจเจฐ) เจฆเจพ เจจเจพเจฎ เจนเฉเฅค เจเฉเจเจฐ เจธเจฐเจตเจฐ เจเจฟเจธเฉ เจนเฉเจฐ เจธเจฐเจตเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉ, เจคเจพเจ เจฐเฉเจซ เจเจเจกเฉ เจตเจฟเฉฑเจ เจเจธ เจธเจฐเจตเจฐ เจฆเจพ เจชเจคเจพ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค
เจเจเจฐเฉ 4 เจเฉเจคเจฐ เจธเจฎเฉเจ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเฉ เจนเจจ - 32 เจฌเจฟเฉฑเจ - เจชเฉเจฐเจจ เจ
เฉฐเจ, 32 เจฌเจฟเฉฑเจ - เจซเฉเจฐเฉเจเจธเจผเจจเจฒ เจนเจฟเฉฑเจธเจพเฅค
เจนเจตเจพเจฒเจพ - เจธเจฐเจตเจฐ 'เจคเฉ เจจเจตเฉเจจเจคเจฎ เจเฉเฉ เจฐเฉเจกเจฟเฉฐเจเฅค
เจธเจผเฉเจฐเฉ - เจเจน เจธเจฎเจพเจ เจเจฆเฉเจ เจชเฉเจเฉเจ เจญเฉเจเจฟเจ เจเจฟเจ เจธเฉ (เจธเจฐเจตเจฐ เจฆเฉเจเจฐเจพ เจญเจฐเจฟเจ เจเจฟเจ - เจนเฉเจ เจพเจ เจเจธ เจฌเจพเจฐเฉ เจนเฉเจฐ)เฅค
เจชเฉเจฐเจพเจชเจค เจเจฐเฉ - เจธเจฐเจตเจฐ เจฆเฉเจเจฐเจพ เจชเฉเจเฉเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเจพ เจธเจฎเจพเจเฅค
เจชเฉเจฐเจธเจพเจฐเจฟเจค - เจธเจฐเจตเจฐ เจคเฉเจ เจเจพเจนเจ เจจเฉเฉฐ เจชเฉเจเฉเจ เจญเฉเจเจฃ เจฆเจพ เจธเจฎเจพเจ (เจเจฒเจพเจเฉฐเจ เจฆเฉเจเจฐเจพ เจญเจฐเจฟเจ เจเจฟเจ, เจนเฉเจ เจพเจ เจเจธ เจฌเจพเจฐเฉ เจนเฉเจฐ)เฅค
เจ เจธเฉเจ เจเจเจฐเฉ เจฆเฉ เจเฉเจคเจฐเจพเจ 'เจคเฉ เจตเจฟเจเจพเจฐ เจจเจนเฉเจ เจเจฐเจพเจเจเฉเฅค
เจเจ เจธเจพเจกเจพ เจชเฉเจเฉเจ เจฒเจฟเจเฉเจ:
เจชเฉเจเฉเจ เจเฉเจก
class NTPPacket:
_FORMAT = "!B B b b 11I"
def __init__(self, version_number=2, mode=3, transmit=0):
# Necessary of enter leap second (2 bits)
self.leap_indicator = 0
# Version of protocol (3 bits)
self.version_number = version_number
# Mode of sender (3 bits)
self.mode = mode
# The level of "layering" reading time (1 byte)
self.stratum = 0
# Interval between requests (1 byte)
self.pool = 0
# Precision (log2) (1 byte)
self.precision = 0
# Interval for the clock reach NTP server (4 bytes)
self.root_delay = 0
# Scatter the clock NTP-server (4 bytes)
self.root_dispersion = 0
# Indicator of clocks (4 bytes)
self.ref_id = 0
# Last update time on server (8 bytes)
self.reference = 0
# Time of sending packet from local machine (8 bytes)
self.originate = 0
# Time of receipt on server (8 bytes)
self.receive = 0
# Time of sending answer from server (8 bytes)
self.transmit = transmit
เจธเจฐเจตเจฐ เจจเฉเฉฐ เจเฉฑเจ เจชเฉเจเฉเจ เจญเฉเจเจฃ (เจ
เจคเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ) เจฒเจ, เจธเจพเจจเฉเฉฐ เจเจธเจจเฉเฉฐ เจเฉฑเจ เจฌเจพเจเจ เจเจฐเฉ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฃ เจฆเฉ เจฏเฉเจ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
เจเจธ (เจ
เจคเฉ เจเจฒเจ) เจเจพเจฐเจตเจพเจ เจฒเจ, เจ
เจธเฉเจ เจฆเฉ เจซเฉฐเจเจธเจผเจจ เจฒเจฟเจเจพเจเจเฉ - pack() เจ
เจคเฉ unpack():
เจชเฉเจ เจซเฉฐเจเจธเจผเจจ
def pack(self):
return struct.pack(NTPPacket._FORMAT,
(self.leap_indicator << 6) +
(self.version_number << 3) + self.mode,
self.stratum,
self.pool,
self.precision,
int(self.root_delay) + get_fraction(self.root_delay, 16),
int(self.root_dispersion) +
get_fraction(self.root_dispersion, 16),
self.ref_id,
int(self.reference),
get_fraction(self.reference, 32),
int(self.originate),
get_fraction(self.originate, 32),
int(self.receive),
get_fraction(self.receive, 32),
int(self.transmit),
get_fraction(self.transmit, 32))
เจ เจจเจชเฉเจ เจซเฉฐเจเจธเจผเจจ
def unpack(self, data: bytes):
unpacked_data = struct.unpack(NTPPacket._FORMAT, data)
self.leap_indicator = unpacked_data[0] >> 6 # 2 bits
self.version_number = unpacked_data[0] >> 3 & 0b111 # 3 bits
self.mode = unpacked_data[0] & 0b111 # 3 bits
self.stratum = unpacked_data[1] # 1 byte
self.pool = unpacked_data[2] # 1 byte
self.precision = unpacked_data[3] # 1 byte
# 2 bytes | 2 bytes
self.root_delay = (unpacked_data[4] >> 16) +
(unpacked_data[4] & 0xFFFF) / 2 ** 16
# 2 bytes | 2 bytes
self.root_dispersion = (unpacked_data[5] >> 16) +
(unpacked_data[5] & 0xFFFF) / 2 ** 16
# 4 bytes
self.ref_id = str((unpacked_data[6] >> 24) & 0xFF) + " " +
str((unpacked_data[6] >> 16) & 0xFF) + " " +
str((unpacked_data[6] >> 8) & 0xFF) + " " +
str(unpacked_data[6] & 0xFF)
self.reference = unpacked_data[7] + unpacked_data[8] / 2 ** 32 # 8 bytes
self.originate = unpacked_data[9] + unpacked_data[10] / 2 ** 32 # 8 bytes
self.receive = unpacked_data[11] + unpacked_data[12] / 2 ** 32 # 8 bytes
self.transmit = unpacked_data[13] + unpacked_data[14] / 2 ** 32 # 8 bytes
return self
เจเจฒเจธเฉ เจฒเฉเจเจพเจ เจฒเจ, เจเฉฑเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ - เจเฉเจก เจเฉ เจเฉฑเจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจเฉฑเจ เจธเฉเฉฐเจฆเจฐ เจธเจคเจฐ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฆเจพ เจนเฉ
def to_display(self):
return "Leap indicator: {0.leap_indicator}n"
"Version number: {0.version_number}n"
"Mode: {0.mode}n"
"Stratum: {0.stratum}n"
"Pool: {0.pool}n"
"Precision: {0.precision}n"
"Root delay: {0.root_delay}n"
"Root dispersion: {0.root_dispersion}n"
"Ref id: {0.ref_id}n"
"Reference: {0.reference}n"
"Originate: {0.originate}n"
"Receive: {0.receive}n"
"Transmit: {0.transmit}"
.format(self)
เจธเจฐเจตเจฐ เจจเฉเฉฐ เจชเฉเจเฉเจ เจญเฉเจเจฟเจ เจเจพ เจฐเจฟเจนเจพ เจนเฉ
เจญเจฐเฉ เจนเฉเจ เจเฉเจคเจฐเจพเจ เจตเจพเจฒเจพ เจเฉฑเจ เจชเฉเจเฉเจ เจธเจฐเจตเจฐ เจจเฉเฉฐ เจญเฉเจเจฟเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจตเจฐเจเจจ, เจฎเฉเจก ะธ เจชเฉเจฐเจธเจพเจฐเจฟเจค. The เจชเฉเจฐเจธเจพเจฐเจฟเจค เจคเฉเจนเจพเจจเฉเฉฐ เจธเจฅเจพเจจเจ เจฎเจธเจผเฉเจจ 'เจคเฉ เจฎเฉเจเฉเจฆเจพ เจธเจฎเจพเจ (1 เจเจจเจตเจฐเฉ 1900 เจคเฉเจ เจธเจเจฟเฉฐเจเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ), เจธเฉฐเจธเจเจฐเจฃ - 1-4 เจตเจฟเฉฑเจเฉเจ เจเฉเจ เจตเฉ, เจฎเฉเจก - 3 (เจเจฒเจพเจเฉฐเจ เจฎเฉเจก) เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
เจธเจฐเจตเจฐ, เจฌเฉเจจเจคเฉ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฐ เจเจฐเจจ เจคเฉเจ เจฌเจพเจ เจฆ, NTP เจชเฉเจเฉเจ เจตเจฟเฉฑเจ เจธเจพเจฐเฉ เจเฉเจคเจฐเจพเจ เจจเฉเฉฐ เจญเจฐเจฆเจพ เจนเฉ, เจเฉเจคเจฐ เจตเจฟเฉฑเจ เจจเจเจฒ เจเจฐเจฆเจพ เจนเฉ เจธเจผเฉเจฐเฉ เจคเฉเจ เจฎเฉเฉฑเจฒ เจชเฉเจฐเจธเจพเจฐเจฟเจค, เจเฉ เจเจฟ เจฌเฉเจจเจคเฉ เจตเจฟเฉฑเจ เจเจเจ เจธเฉ. เจเจน เจฎเฉเจฐเฉ เจฒเจ เจเฉฑเจ เจฐเจนเฉฑเจธ เจนเฉ เจเจฟ เจเจพเจนเจ เจเฉเจคเจฐ เจตเจฟเฉฑเจ เจเจชเจฃเฉ เจธเจฎเฉเจ เจฆเฉ เจเฉเจฎเจค เจจเฉเฉฐ เจคเฉเจฐเฉฐเจค เจเจฟเจเจ เจจเจนเฉเจ เจญเจฐ เจธเจเจฆเจพ เจนเฉ เจธเจผเฉเจฐเฉ. เจจเจคเฉเจเฉ เจตเจเฉเจ, เจเจฆเฉเจ เจชเฉเจเฉเจ เจตเจพเจชเจธ เจเจเจเจฆเจพ เจนเฉ, เจคเจพเจ เจเจฒเจพเจเฉฐเจ เจเฉเจฒ 4 เจธเจฎเฉเจ เจฆเฉ เจฎเฉเฉฑเจฒ เจนเฉเฉฐเจฆเฉ เจนเจจ - เจเจฆเฉเจ เจฌเฉเจจเจคเฉ เจญเฉเจเฉ เจเจ เจธเฉ (เจธเจผเฉเจฐเฉ), เจธเจฐเจตเจฐ เจจเฉเฉฐ เจฌเฉเจจเจคเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเจพ เจธเจฎเจพเจ (เจชเฉเจฐเจพเจชเจค เจเจฐเฉ), เจเจฆเฉเจ เจธเจฐเจตเจฐ เจจเฉ เจเจตเจพเจฌ เจญเฉเจเจฟเจ (เจชเฉเจฐเจธเจพเจฐเจฟเจค) เจ เจคเฉ เจเจพเจนเจ เจจเฉเฉฐ เจเจตเจพเจฌ เจฎเจฟเจฒเจฃ เจฆเจพ เจธเจฎเจพเจ - เจชเจนเฉเฉฐเจเฉ (เจชเฉเจเฉเจ เจตเจฟเฉฑเจ เจจเจนเฉเจ)เฅค เจเจนเจจเจพเจ เจฎเฉเฉฑเจฒเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจ เจธเฉเจ เจธเจนเฉ เจธเจฎเจพเจ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐ เจธเจเจฆเฉ เจนเจพเจเฅค
เจชเฉเจเฉเจ เจญเฉเจเจฃเจพ เจ เจคเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจพ เจเฉเจก
# Time difference between 1970 and 1900, seconds
FORMAT_DIFF = (datetime.date(1970, 1, 1) - datetime.date(1900, 1, 1)).days * 24 * 3600
# Waiting time for recv (seconds)
WAITING_TIME = 5
server = "pool.ntp.org"
port = 123
packet = NTPPacket(version_number=2, mode=3, transmit=time.time() + FORMAT_DIFF)
answer = NTPPacket()
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
s.settimeout(WAITING_TIME)
s.sendto(packet.pack(), (server, port))
data = s.recv(48)
arrive_time = time.time() + FORMAT_DIFF
answer.unpack(data)
เจธเจฐเจตเจฐ เจคเฉเจ เจกเจพเจเจพ เจชเฉเจฐเฉเจธเฉเจธ เจเฉเจคเจพ เจเจพ เจฐเจฟเจนเจพ เจนเฉ
เจธเจฐเจตเจฐ เจคเฉเจ เจกเฉเจเจพ เจจเฉเฉฐ เจชเฉเจฐเฉเจธเฉเจธ เจเจฐเจจเจพ เจฐเฉเจฎเฉฐเจก เจเจฎ. เจธเจฎเฉเจฒเฉเจ เจจ (1978) เจฆเฉ เจชเฉเจฐเจพเจฃเฉ เจธเจฎเฉฑเจธเจฟเจ เจคเฉเจ เจ เฉฐเจเจฐเฉเจเจผ เจธเฉฑเจเจฃ เจฆเฉเจเจ เจเจพเจฐเจตเจพเจเจเจ เจฆเฉ เจธเจฎเจพเจจ เจนเฉ: "เจเฉฑเจ เจเจฆเจฎเฉ เจเฉเจฒ เจเฉเฉฑเจ เจเฉเฉ เจจเจนเฉเจ เจธเฉ, เจชเจฐ เจเจฐ เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจนเฉ เจเฉฐเจง เจเฉเฉ เจธเฉ, เจเจฟเจธเจจเฉเฉฐ เจเจน เจเจ เจตเจพเจฐ เจญเฉเฉฑเจฒ เจเจพเจเจฆเจพ เจธเฉเฅค เจนเจตเจพ เจจเฉเฉฐ. เจเฉฑเจ เจฆเจฟเจจ, เจเจชเจฃเฉ เจเฉเฉ เจจเฉเฉฐ เจฆเฉเจฌเจพเจฐเจพ เจเจฒเจพเจเจฃเจพ เจญเฉเฉฑเจฒ เจเจฟเจ, เจเจน เจเจชเจฃเฉ เจฆเฉเจธเจค เจจเฉเฉฐ เจฎเจฟเจฒเจฃ เจเจฒเจพ เจเจฟเจ, เจธเจผเจพเจฎ เจเจธ เจจเจพเจฒ เจฌเจฟเจคเจพเจ, เจ เจคเฉ เจเจฆเฉเจ เจเจน เจเจฐ เจตเจพเจชเจธ เจเจเจ, เจคเจพเจ เจเจธเจจเฉ เจเฉเฉ เจจเฉเฉฐ เจธเจนเฉ เจคเจฐเฉเจนเจพเจ เจธเฉเฉฑเจ เจเฉเจคเจพเฅค เจเฉ เจฏเจพเจคเจฐเจพ เจฆเจพ เจธเจฎเจพเจ เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจชเจคเจพ เจจเจนเฉเจ เจธเฉ เจคเจพเจ เจเจธเจจเฉ เจ เจเจฟเจนเจพ เจเจฟเจตเฉเจ เจเฉเจคเจพ? เจเจตเจพเจฌ เจนเฉ: โเจเจฐ เจเฉฑเจกเจฃ เจตเฉเจฒเฉ, เจเฉฑเจ เจตเจฟเจ เจเจคเฉ เจเจชเจฃเฉ เจเฉเฉ เจจเฉเฉฐ เจนเจตเจพ เจฆเจฟเฉฐเจฆเจพ เจนเฉ เจ เจคเฉ เจฏเจพเจฆ เจฐเฉฑเจเจฆเจพ เจนเฉ เจเจฟ เจนเฉฑเจฅ เจเจฟเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจนเจจเฅค เจเจฟเจธเฉ เจฆเฉเจธเจค เจเฉเจฒ เจ เจเฉ เจ เจคเฉ เจฎเจนเจฟเจฎเจพเจจเจพเจ เจจเฉเฉฐ เจเฉฑเจก เจเฉ, เจเจน เจเจชเจฃเฉ เจเจเจฃ เจ เจคเฉ เจเจพเจฃ เจฆเจพ เจธเจฎเจพเจ เจจเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค เจเจน เจเจธเจจเฉเฉฐ เจเจน เจชเจคเจพ เจฒเจเจพเจเจฃ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ เจเจฟ เจเจน เจเจฟเฉฐเจจเฉ เจธเจฎเฉเจ เจฒเจ เจฎเฉเจฒเจพเจเจพเจค เจเจฐ เจฐเจฟเจนเจพ เจธเฉเฅค เจเจฐ เจตเจพเจชเจธ เจ เจเฉ เจ เจคเฉ เจเฉเฉ เจจเฉเฉฐ เจฆเฉเจ เจเฉ, เจเฉฑเจ เจตเจฟเจ เจเจคเฉ เจเจชเจฃเฉ เจเฉเจฐเจนเจพเจเจผเจฐเฉ เจฆเฉ เจฎเจฟเจเจฆ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจฆเจพ เจนเฉ. เจเจธ เจธเจฎเฉเจ เจคเฉเจ เจเจเจพ เจเฉ เจเจธ เจจเฉ เจฎเจฟเจฒเจฃ เจฒเจ เจฌเจฟเจคเจพเจเจ เจธเจฎเจพเจ, เจเฉฑเจ เจตเจฟเจ เจเจคเฉ เจเฉฑเจฅเฉ เจ เจคเฉ เจตเจพเจชเจธ เจฏเจพเจคเจฐเจพ เจเจฐเจจ เจตเจฟเฉฑเจ เจฌเจฟเจคเจพเจ เจธเจฎเฉเจ เจฆเจพ เจชเจคเจพ เจฒเจเจพเจเจเจฆเจพ เจนเฉเฅค เจฎเจนเจฟเจฎเจพเจจเจพเจ เจจเฉเฉฐ เจเฉฑเจกเจฃ เจฆเฉ เจธเจฎเฉเจ เจตเจฟเฉฑเจ เจธเฉเจ 'เจคเฉ เจฌเจฟเจคเจพเจ เจ เฉฑเจงเฉ เจธเจฎเฉเจ เจจเฉเฉฐ เจเฉเฉ เจเฉ, เจเจธเจจเฉเฉฐ เจเจฐ เจชเจนเฉเฉฐเจเจฃ เจฆเจพ เจธเจฎเจพเจ เจชเจคเจพ เจเจฐเจจ เจ เจคเฉ เจเจธ เจ เจจเฉเจธเจพเจฐ เจเจชเจฃเฉ เจเฉเฉ เจฆเฉ เจนเฉฑเจฅเจพเจ เจจเฉเฉฐ เจ เจจเฉเจเฉเจฒ เจเจฐเจจ เจฆเจพ เจฎเฉเจเจพ เจฎเจฟเจฒเจฆเจพ เจนเฉเฅค
เจธเจฐเจตเจฐ เจฆเฉเจเจฐเจพ เจเฉฑเจ เจฌเฉเจจเจคเฉ 'เจคเฉ เจเฉฐเจฎ เจเจฐเจจ เจฆเจพ เจธเจฎเจพเจ เจฒเฉฑเจญเฉ:
- เจเจพเจนเจ เจคเฉเจ เจธเจฐเจตเจฐ เจคเฉฑเจ เจชเฉเจเฉเจ เจฆเจพ เจฏเจพเจคเจฐเจพ เจธเจฎเจพเจ เจฒเฉฑเจญเฉ: ((เจชเจนเฉเฉฐเจเฉ โ เจเจคเจชเฉฐเจจ เจเจฐเฉ) โ (เจชเฉเจฐเจธเจพเจฐเจฟเจค โ เจชเฉเจฐเจพเจชเจค เจเจฐเฉ)) / 2
- เจเจฒเจพเจเฉฐเจ เจ
เจคเฉ เจธเจฐเจตเจฐ เจฆเฉ เจธเจฎเฉเจ เจตเจฟเฉฑเจ เจ
เฉฐเจคเจฐ เจฒเฉฑเจญเฉ:
เจชเฉเจฐเจพเจชเจค เจเจฐเฉ - เจเจคเจชเฉฐเจจ - ((เจชเจนเฉเฉฐเจเฉ - เจเจคเจชเฉฐเจจ เจเจฐเฉ) - (เจชเฉเจฐเจธเจพเจฐเจฟเจค เจเจฐเฉ - เจชเฉเจฐเจพเจชเจค เจเจฐเฉ)) / 2 =
2 * เจชเฉเจฐเจพเจชเจค เจเจฐเฉ - 2 * เจเจคเจชเฉฑเจคเฉ - เจชเจนเฉเฉฐเจเฉ + เจเจคเจชเฉฐเจจ + เจธเฉฐเจเจพเจฐเจฟเจค - เจชเฉเจฐเจพเจชเจค เจเจฐเฉ =
เจชเฉเจฐเจพเจชเจค เจเจฐเฉ - เจเจคเจชเฉฐเจจ - เจชเจนเฉเฉฐเจเฉ + เจเฉเจฐเจพเจเจธเจฎเจฟเจ เจเจฐเฉ
เจ เจธเฉเจ เจจเจคเฉเจเจพ เจฎเฉเฉฑเจฒ เจจเฉเฉฐ เจธเจฅเจพเจจเจ เจธเจฎเฉเจ เจตเจฟเฉฑเจ เจเฉเฉเจฆเฉ เจนเจพเจ เจ เจคเฉ เจเฉเจตเจจ เจฆเจพ เจ เจจเฉฐเจฆ เจฒเฉเจเจฆเฉ เจนเจพเจเฅค
เจจเจคเฉเจเฉ เจฆเจพ เจเจเจเจชเฉเฉฑเจ
time_different = answer.get_time_different(arrive_time)
result = "Time difference: {}nServer time: {}n{}".format(
time_different,
datetime.datetime.fromtimestamp(time.time() + time_different).strftime("%c"),
answer.to_display())
print(result)
เจเจชเจฏเฉเจเฉ
เจธเจฐเฉเจค: www.habr.com