เบชเบฐเบเบฒเบเบเบต, Habrusers. เบกเบทเปโเบเบตเปโเบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเปเบญเบโเบเบฒเบโเบชเบปเบโเบเบฐโเบเบฒโเบเปเบฝเบงโเบเบฑเบโเบงเบดโเบเบตโเบเบฒเบโเบเบฝเบโเบฅเบนเบโเบเปเบฒ NTP เบเปเบฒเบโเบเบฒเบโเบเบญเบโเบเปเบฒเบโเปเบญเบโ. เปเบเบเบเบทเปเบเบเบฒเบเปเบฅเปเบง, เบเบฒเบเบชเบปเบเบเบฐเบเบฒเบเบฐเบซเบฑเบเปเบเบซเบฒเปเบเบเบชเปเบฒเบเบเบญเบเปเบเบฑเบเปเบเบฑเบเปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเบเบฒเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ NTP. เบฅเบฐเบซเบฑเบเบเบฐเบเบทเบเบเบฝเบเปเบ Python, เปเบเบฒเบฐเบงเปเบฒเบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเปเบญเบเบเปเปเบกเบตเบเบฒเบชเบฒเบเบตเปเบเบตเบเบงเปเบฒเบชเปเบฒเบฅเบฑเบเบชเบดเปเบเบเบฑเปเบเบเปเบฒเบง. Connoisseurs เบเบฐเบชเบฑเบเปเบเบเปเบซเบฑเบเบเบงเบฒเบกเบเปเบฒเบเบเบทเบเบฑเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเบกเบตเบฅเบฐเบซเบฑเบ ntplib - เบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบ "เบเบปเบเปเบ" เบเบฒเบเบกเบฑเบ.
เบเบฑเปเบเบเบฑเปเบ NTP เปเบกเปเบเบซเบเบฑเบ? NTP เปเบกเปเบเปเบเปเบเบเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเปเบเบญเบเบเบฑเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบตเปเปเบเปเปเบงเบฅเบฒเบเบตเปเปเบเปเบเบญเบ. เปเบเปเบเบเบญเบเบเบตเปเบเบทเบเบเปเบฒเปเบเปเปเบเปเบเบทเปเบญเบเบเบฑเบเบเบตเปเบเบฑเบเบชเบฐเปเบซเบกเบซเบผเบฒเบ. เบเบปเบงเบขเปเบฒเบ, เบเบฒเบเบเปเบฅเบดเบเบฒเบ w32tm เปเบเบเปเบญเบเบขเปเบฝเบก.
เบกเบต 5 เบฅเบธเปเบเบเบญเบเปเบเปเบเบเบญเบ NTP เบเบฑเบเปเบปเบ. เบชเบฐเบเบฑเบเบเปเบฒเบญเบดเบ, เบฎเบธเปเบ 0 (1985, RFC958)), เบเบฐเบเบธเบเบฑเบเบเบทเบงเปเบฒเบฅเปเบฒเบชเบฐเปเบซเบก. เบเบญเบเบเบตเปเปเบเบทเปเบญเบเบเบตเปเปเปเปเบเบงเปเบฒเปเบเปเบเบทเบเบเปเบฒเปเบเป, เบเบต 1 (1988, RFC1059), 2nd (1989, RFC1119), 3rd (1992, RFC1305) เปเบฅเบฐ 4th (1996, RFC2030). เบฎเบธเปเบ 1-4 เปเบกเปเบเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบเบฑเบเปเบฅเบฐเบเบฑเบ; เบเบงเบเบกเบฑเบเปเบเบเบเปเบฒเบเบเบฑเบเบเบฝเบเปเบเปเปเบเบเบฑเปเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ.
เบฎเบนเบเปเบเบเบเบญเบ
เบเบปเบงเบเบตเปเบเบญเบเบเบฒเบเบเปเบฒเบง (เบเบปเบงเบเบตเปเบงเบฑเบเบเบฒเบเปเบเปเปเบ) - เบเบปเบงเปเบฅเบเบเบตเปเบเบตเปเปเบซเปเปเบซเบฑเบเปเบเบดเบเบเบฒเบเปเบเบทเบญเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฐเบชเบฒเบเบเบฒเบเบเบตเบชเบญเบ. เบเบงเบฒเบกเปเบฒเบ:
- 0 - เบเปเปเบกเบตเบเบฒเบเปเบเปเปเบ
- 1 - เบเบฒเบเบตเบชเบธเบเบเปเบฒเบเบเบญเบเบกเบทเปเบเบฐเบเบญเบเบกเบต 61 เบงเบดเบเบฒเบเบต
- 2 โ เบเบฒเบเบตเบชเบธเบเบเปเบฒเบเบเบญเบเบกเบทเปเบกเบต 59 เบงเบดเบเบฒเบเบต
- 3 - เปเบเบตเบเปเบงเบตเบฅเบปเปเบกเปเบซเบฅเบง (เปเบปเบเปเบงเบฅเบฒเบเบดเปเบ)
เบเปเบฒเบเบงเบเปเบงเบตเบเบฑเบ (เบซเบกเบฒเบโเปเบฅเบโเบชเบฐโเบเบฑเบโ) โ NTP protocol เปเบฅเบโเปเบงเบตโเบเบฑเบ (1-4โ)โ.
เบฎเบนเบเปเบเบเบเบฒเบ (mode) โ เบฎเบนเบเปเบเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเบนเปเบชเบปเปเบเปเบเบฑเบเปเบเบฑเบ. เบเปเบฒเบเบฒเบ 0 เบซเบฒ 7, เบเบปเปเบงเปเบเบเบตเปเบชเบธเบ:
- 3 - เบฅเบนเบโเบเปเบฒโ
- 4 - เปเบเบตเบเปเบงเบต
- 5 - เบฎเบนเบเปเบเบเบเบฒเบเบญเบญเบเบญเบฒเบเบฒเบ
เบฅเบณ เบเบปเปเบ (เบฅเบฐเบเบฑเบเบเบฑเปเบ) โ เบเบณเบเบงเบเบเบฑเปเบเบเบฒเบเบฅเบฐเบซเบงเปเบฒเบเปเบเบตเบเปเบงเบต เปเบฅเบฐเปเบกเบเบญเปเบฒเบเบญเบตเบ (1 โ เปเบเบตเบเปเบงเบตเปเบญเบปเบฒเบเปเปเบกเบนเบเปเบเบเบเบปเบเบเบฒเบเปเบกเบเบญเปเบฒเบเบญเบตเบ, 2 โ เปเบเบตเบเปเบงเบตเปเบญเบปเบฒเบเปเปเบกเบนเบเบเบฒเบเปเบเบตเบเปเบงเบตเบเบตเปเบกเบตเบเบฑเปเบ 1, เปเบฅเบฐเบญเบทเปเบเป).
เบฅเบญเบเบเปเปเบฒ เปเบเบฑเบเบเบณเบเบงเบเปเบเบฑเบกเบเบตเปเบฅเบปเบเบฅเบฒเบเปเบเบฑเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบเบเปเบงเบเปเบงเบฅเบฒเบชเบนเบเบชเบธเบเบฅเบฐเบซเบงเปเบฒเบเบเปเปเบเบงเบฒเบกเบเบดเบเบเปเปเบเบฑเบ. เบฅเบนเบเบเปเบฒ NTP เบฅเบฐเบเบธเบเปเบงเบเปเบงเบฅเบฒเบเบตเปเบกเบฑเบเบเบฒเบเบงเปเบฒเบเบฐเบฅเบปเบเบเบฐเปเบเบเปเบเบตเบเปเบงเบต, เปเบฅเบฐเปเบเบตเบเปเบงเบต NTP เบฅเบฐเบเบธเปเบฅเบเบฐเบเบตเปเบกเบฑเบเบเบฒเบเบงเปเบฒเบเบฐเบเบทเบเบชเบณเบซเบผเบงเบ. เบเปเบฒเปเบกเปเบเปเบเบปเปเบฒเบเบฑเบเบชเบญเบ logarithm เบเบญเบเบงเบดเบเบฒเบเบต.
เบเบงเบฒเบกเปเบกเปเบเบเปเบฒ (เบเบงเบฒเบกเปเบกเปเบเบเปเบฒ) เปเบเบฑเบเบเบณเบเบงเบเปเบเบฑเบกเบเบตเปเบฅเบปเบเบฅเบฒเบเปเบเบฑเบเบชเบฐเปเบเบเปเบเบดเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเบญเบเปเบกเบเบฅเบฐเบเบปเบ. เบเปเบฒเปเบกเปเบเปเบเบปเปเบฒเบเบฑเบเบชเบญเบ logarithm เบเบญเบเบงเบดเบเบฒเบเบต.
เบเบฒเบเบเบฑเบเบเปเบฒเบเบญเบเบฎเบฒเบ (เบเบงเบฒเบกเบฅเปเบฒเบเปเบฒเบเบญเบเปเบเบตเบเปเบงเบต) โ เปเบงเบฅเบฒเบเบตเปเบกเบฑเบเปเบเปเปเบงเบฅเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบญเปเบฒเบเปเบกเบเปเบเบทเปเบญเปเบเบปเปเบฒเบซเบฒเปเบเบตเบเปเบงเบต NTP, เปเบเบฑเบเบเปเบฒเบเบงเบเบเบธเบเบเบปเบเบเบตเปเบเบญเบเบงเบดเบเบฒเบเบต.
เบเบฒเบเบเบฐเบเบฒเบเบเบญเบเบฎเบฒเบ (เบเบฒเบเปเบเปเบเบฐเบเบฒเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ) - เบเบฒเบเปเบเปเบเบฐเบเบฒเบเบเบญเบเบเบฒเบเบญเปเบฒเบเปเบกเบเปเบเบตเบเปเบงเบต NTP เปเบเบฑเบเบเปเบฒเบเบงเบเบงเบดเบเบฒเบเบตเบเบตเปเบกเบตเบเบธเบเบเบปเบเบเบตเป.
เปเบฒเบเปเบฅเบเบญเปเบฒเบเบญเบตเบ (ID เปเบซเบผเปเบ) โ watch id. เบเปเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบกเบต stratum 1, ref id เปเบกเปเบเบเบทเปเบเบญเบเปเบกเบเบเบฐเบฅเปเบฒเบกเบฐเบเบน (4 เบเบปเบงเบญเบฑเบเบชเบญเบ ASCII). เบเปเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเปเบเปเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบญเบทเปเบ, id ref เบเบฐเบเบญเบเบเปเบงเบเบเบตเปเบขเบนเปเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบตเป.
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
เปเบเบทเปเบญเบชเบปเปเบ (เปเบฅเบฐเบฎเบฑเบ) packet เปเบเบซเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบซเปเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบ byte array.
เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเป (เปเบฅเบฐเบเบตเปเบเบเบฑเบเบเบฑเบ), เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฝเบเบชเบญเบเบซเบเปเบฒเบเบตเป - 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))
เบเบฑเบเบเบฑเบ unpack
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)
เบเบฒเบเบชเบปเปเบเบเบธเบเปเบเบซเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ
เปเบเบฑเบเปเบเบฑเบเบเบตเปเบกเบตเบเปเบญเบเบเปเปเบกเบนเบเปเบเบฑเบกเปเบเบเปเบญเบเบเบทเบเบชเบปเปเบเปเบเบซเบฒเปเบเบตเบเปเบงเบต Version, เบฎเบนเบเปเบเบเบเบฒเบ ะธ เบชเบปเปเบ. เบเบฒเบ เบชเบปเปเบ เบเปเบฒเบเบเปเบญเบเบฅเบฐเบเบธเปเบงเบฅเบฒเบเบฐเบเบธเบเบฑเบเบขเบนเปเปเบเปเบเบทเปเบญเบเบเปเบญเบเบเบดเปเบ (เบเปเบฒเบเบงเบเบงเบดเบเบฒเบเบตเบเบฑเบเบเบฑเปเบเปเบเปเบงเบฑเบเบเบต 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)
เบเบณเบฅเบฑเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบเบเบฒเบเปเบเบตเบเปเบงเบต
เบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบเบเบฒเบเปเบเบตเบเปเบงเบตเปเบกเปเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฒเบเบเบฐเบเปเบฒเบเบญเบเบชเบธเบเบฒเบเบเบธเบฅเบธเบเบญเบฑเบเบเบดเบเบเบฒเบเบเบฑเบเบซเบฒเปเบเบปเปเบฒเบเบญเบ Raymond M. Smullyan (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