เชนเซเชฒเซ เชนเซเชฌเซเชฐเชพเชเชเชฐเซเชธ. เชเชเซ เชนเซเช เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชธเชฐเชณ NTP เชเซเชฒเชพเชฏเชเชเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเซเช เชคเซ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช. เชฎเซเชณเชญเซเชค เชฐเซเชคเซ, เชตเชพเชคเชเซเชค เชชเซเชเซเชเชจเซ เชฐเชเชจเชพ เช
เชจเซ NTP เชธเชฐเซเชตเชฐ เชคเชฐเชซเชฅเซ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชเซเชตเซ เชฐเซเชคเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชคเซ เชคเชฐเชซ เชตเชณเชถเซ. เชเซเชก python เชฎเชพเช เชฒเชเชตเชพเชฎเชพเช เชเชตเชถเซ, เชเชพเชฐเชฃ เชเซ, เชฎเชพเชฐเชพ เชฎเชคเซ, เชเชตเซ เชตเชธเซเชคเซเช เชฎเชพเชเซ เชเซเช เชตเชงเซ เชธเชพเชฐเซ เชญเชพเชทเชพ เชจเชฅเซ. เชเชพเชฃเชเชพเชฐเซ ntplib เชเซเชก เชธเชพเชฅเซ เชเซเชกเชจเซ เชธเชฎเชพเชจเชคเชพ เชชเชฐ เชงเซเชฏเชพเชจ เชเชชเชถเซ - เชนเซเช เชคเซเชจเชพเชฅเซ "เชชเซเชฐเซเชฐเชฟเชค" เชนเชคเซ.
เชคเซ เชเซเชเชชเชฃ เชฐเซเชคเซ NTP เชถเซเช เชเซ? NTP เช เชธเชฎเชฏ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชตเชพเชคเชเซเชค เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชชเซเชฐเซเชเซเชเซเชฒ เชเซ. เช เชชเซเชฐเซเชเซเชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฃเชพ เชเชงเซเชจเชฟเช เชฎเชถเซเชจเซเชฎเชพเช เชฅเชพเชฏ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชตเชฟเชจเซเชกเซเช เชชเชฐ w32tm เชธเซเชตเชพ.
NTP เชชเซเชฐเซเชเซเชเซเชฒเชจเชพ เชเซเชฒ 5 เชตเชฐเซเชเชจ เชเซ. เชชเซเชฐเชฅเชฎ, เชธเชเชธเซเชเชฐเชฃ 0 (1985, RFC958) เชนเชพเชฒเชฎเชพเช เช เชชเซเชฐเชเชฒเชฟเชค เชฎเชพเชจเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชจเชตเชพเชจเซ เชนเชพเชฒเชฎเชพเช เชเชชเชฏเซเช เชฅเชพเชฏ เชเซ, 1 เชฒเซ (1988, RFC1059), 2เชเซ (1989, RFC1119), เชคเซเชฐเซเชเซ (3, RFC1992) เช เชจเซ เชเซเชฅเซ (1305, RFC4). เชเชตเซเชคเซเชคเชฟเช 1996-2030 เชเชเชฌเซเชเชพ เชธเชพเชฅเซ เชธเซเชธเชเชเชค เชเซ, เชคเซเช เชซเชเซเชค เชธเชฐเซเชตเชฐเชจเชพ เช เชฒเซเชเซเชฐเชฟเชงเชฎเซเชธเชฎเชพเช เช เชฒเช เชชเชกเซ เชเซ.
เชชเซเชเซเช เชซเซเชฐเซเชฎเซเช
เชฒเซเชช เชธเซเชเช (เชธเซเชงเชพเชฐเชฃเชพ เชธเซเชเช) เช เชเช เชธเชเชเซเชฏเชพ เชเซ เชเซ เชฒเซเชช เชธเซเชเชจเซเชกเชจเซ เชเซเชคเชตเชฃเซ เชธเซเชเชตเซ เชเซ. เช
เชฐเซเชฅ:
- 0 - เชเซเช เชธเซเชงเชพเชฐเซ เชจเชฅเซ
- 1 - เชฆเชฟเชตเชธเชจเซ เชเซเชฒเซเชฒเซ เชฎเชฟเชจเชฟเชเชฎเชพเช 61 เชธเซเชเชจเซเชกเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ
- 2 - เชฆเชฟเชตเชธเชจเซ เชเซเชฒเซเชฒเซ เชฎเชฟเชจเชฟเชเชฎเชพเช 59 เชธเซเชเชจเซเชก เชนเซเชฏ เชเซ
- 3 - เชธเชฐเซเชตเชฐ เชจเชฟเชทเซเชซเชณเชคเชพ (เชธเชฎเชจเซเชตเชฏเชจเชจเซ เชธเชฎเชฏ เชธเชฎเชพเชชเซเชค)
เชธเชเชธเซเชเชฐเชฃ เชจเชเชฌเชฐ (เชธเชเชธเซเชเชฐเชฃ เชจเชเชฌเชฐ) โ NTP เชชเซเชฐเซเชเซเชเซเชฒ เชธเชเชธเซเชเชฐเชฃ เชจเชเชฌเชฐ (1-4).
เชธเซเชฅเชฟเชคเชฟ (เชฎเซเชก) - เชชเซเชเซเช เชฎเซเชเชฒเชจเชพเชฐเชจเซเช เชเชชเชฐเซเชถเชจ เชฎเซเชก. 0 เชฅเซ 7 เชฎเซเชฒเซเชฏ, เชธเซเชฅเซ เชธเชพเชฎเชพเชจเซเชฏ:
- 3 - เชเซเชฐเชพเชนเช
- 4 - เชธเชฐเซเชตเชฐ
- 5 - เชฌเซเชฐเซเชกเชเชพเชธเซเช เชฎเซเชก
เชธเซเชเซเชฐเซเชเชฎ (เชฒเซเชฏเชฐเชฟเชเช เชฒเซเชตเชฒ) - เชธเชฐเซเชตเชฐ เช
เชจเซ เชธเชเชฆเชฐเซเชญ เชเชกเชฟเชฏเชพเชณ เชตเชเซเชเซเชจเชพ เชฎเชงเซเชฏเชตเชฐเซเชคเซ เชธเซเชคเชฐเซเชจเซ เชธเชเชเซเชฏเชพ (1 - เชธเชฐเซเชตเชฐ เชธเซเชงเชพ เชธเชเชฆเชฐเซเชญ เชเชกเชฟเชฏเชพเชณเชฎเชพเชเชฅเซ เชกเซเชเชพ เชฒเซ เชเซ, 2 - เชธเชฐเซเชตเชฐ เชธเซเชคเชฐ 1 เชธเชพเชฅเซ เชธเชฐเซเชตเชฐเชฎเชพเชเชฅเซ เชกเซเชเชพ เชฒเซ เชเซ, เชตเชเซเชฐเซ).
เชธเชฎเซเชเซเชเชฏ เชธเชณเชเช เชธเชเชฆเซเชถเชพเช เชตเชเซเชเซเชจเชพ เชฎเชนเชคเซเชคเชฎ เช
เชเชคเชฐเชพเชฒเชจเซเช เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชคเซเชต เชเชฐเชคเซเช เชธเชพเชเชจ เชเชฐเซเชฒ เชชเซเชฐเซเชฃเชพเชเช เชเซ. NTP เชเซเชฒเชพเชฏเชเช เช
เชนเซเช เชคเซ เช
เชเชคเชฐเชพเชฒเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชเซ เชเซ เชเซเชจเชพ เชชเชฐ เชคเซ เชธเชฐเซเชตเชฐเชจเซ เชฎเชคเชฆเชพเชจ เชเชฐเชตเชพเชจเซ เช
เชชเซเชเซเชทเชพ เชฐเชพเชเซ เชเซ, เช
เชจเซ NTP เชธเชฐเซเชตเชฐ เชคเซ เช
เชเชคเชฐเชพเชฒเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชเซ เชเซ เชเซเชจเชพ เชชเชฐ เชคเซ เชฎเชคเชฆเชพเชจ เชฅเชตเชพเชจเซ เช
เชชเซเชเซเชทเชพ เชฐเชพเชเซ เชเซ. เชฎเซเชฒเซเชฏ เชธเซเชเชจเซเชกเชจเชพ เชฆเซเชตเชฟเชธเชเชเซ เชฒเชเซเชเชฃเช เชเซเชเชฒเซเช เชเซ.
เชถเซเชฆเซเชงเชคเชพ (เชเซเชเชธเชพเช) เช เชธเชฟเชธเซเชเชฎ เชเชกเชฟเชฏเชพเชณเชจเซ เชเซเชเชธเชพเชเชจเซเช เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชคเซเชต เชเชฐเชคเซ เชธเชพเชเชจ เชเชฐเซเชฒ เชชเซเชฐเซเชฃเชพเชเช เชเซ. เชฎเซเชฒเซเชฏ เชธเซเชเชจเซเชกเชจเชพ เชฆเซเชตเชฟเชธเชเชเซ เชฒเชเซเชเชฃเช เชเซเชเชฒเซเช เชเซ.
เชฎเซเชณ เชตเชฟเชฒเชเชฌ (เชธเชฐเซเชตเชฐ เชฒเซเชเชจเซเชธเซ) เช เชเชกเชฟเชฏเชพเชณเชจเซ NTP เชธเชฐเซเชตเชฐ เชธเซเชงเซ เชชเชนเซเชเชเชตเชพเชฎเชพเช เชเซ เชธเชฎเชฏ เชฒเชพเชเซ เชเซ เชคเซ เชธเซเชเชจเซเชกเซเชจเซ เชจเชฟเชถเซเชเชฟเชค-เชฌเชฟเชเชฆเซ เชธเชเชเซเชฏเชพ เชคเชฐเซเชเซ เชเซ.
เชฐเซเช เชตเชฟเชเซเชทเซเชช (เชธเชฐเซเชตเชฐ เชธเซเชเซเชเชฐ) - เชธเซเชเชจเซเชกเชจเซ เชจเชฟเชถเซเชเชฟเชค-เชฌเชฟเชเชฆเซ เชธเชเชเซเชฏเชพ เชคเชฐเซเชเซ NTP เชธเชฐเซเชตเชฐ เชเชกเชฟเชฏเชพเชณเชจเซเช เชธเซเชเซเชเชฐ.
เชธเชเชฆเชฐเซเชญ เชเชเชกเซ (เชธเซเชคเซเชฐเซเชค เชเชเชกเซ) โ เชเชกเชฟเชฏเชพเชณ เชเชเชกเซ. เชเซ เชธเชฐเซเชตเชฐเชฎเชพเช เชธเซเชเซเชฐเซเชเชฎ 1 เชนเซเชฏ, เชคเซ เชฐเซเชซ id เช เช
เชฃเซ เชเชกเชฟเชฏเชพเชณเชจเซเช เชจเชพเชฎ เชเซ (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)
เชธเชฐเซเชตเชฐ เชชเชฐ เชชเซเชเซเช เชฎเซเชเชฒเซ เชฐเชนเซเชฏเซเช เชเซ
เชธเชฐเซเชตเชฐ เชชเชฐ เชญเชฐเซเชฒเชพ เชซเซเชฒเซเชกเซเชธ เชธเชพเชฅเซเชจเซเช เชชเซเชเซเช เชฎเซเชเชฒเซ เชเชตเซเชคเซเชคเชฟ, เชธเซเชฅเชฟเชคเชฟ ะธ เชเซเชฐเชพเชเชธเชฎเชฟเช. เช เชเซเชฐเชพเชเชธเชฎเชฟเช เชคเชฎเชพเชฐเซ เชธเซเชฅเชพเชจเชฟเช เชฎเชถเซเชจ เชชเชฐ เชตเชฐเซเชคเชฎเชพเชจ เชธเชฎเชฏเชจเซ เชเชฒเซเชฒเซเช เชเชฐเชตเซ เชเชตเชถเซเชฏเช เชเซ (เชเชพเชจเซเชฏเซเชเชฐเซ 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