เดนเดฒเต, เดนเดฌเตเดฐเตเดธเตเดดเตเดธเต. เดจเดฟเดเตเดเดณเตเดเต เดธเตเดตเดจเตเดคเด NTP เดเตเดฒเดฏเดจเตเดฑเต เดเดเตเดเดจเต เดเดดเตเดคเดพเด เดเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดจเตเดจเต เดเดพเตป เดธเดเดธเดพเดฐเดฟเดเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเต. เด
เดเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏเดฟ, เดธเดเดญเดพเดทเดฃเด เดชเดพเดเตเดเดฑเตเดฑเดฟเดจเตเดฑเต เดเดเดจเดฏเดฟเดฒเตเดเตเดเตเด NTP เดธเตเตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดคเดฟเดเดฐเดฃเด เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจ เดฐเตเดคเดฟเดฏเดฟเดฒเตเดเตเดเตเด เดคเดฟเดฐเดฟเดฏเตเด. เดเตเดกเต เดชเตเดคเตเดคเดฃเดฟเตฝ เดเดดเตเดคเดชเตเดชเตเดเตเด, เดเดพเดฐเดฃเด เด
เดคเตเดคเดฐเด เดเดพเดฐเตเดฏเดเตเดเตพเดเตเดเต เดฎเดฟเดเดเตเด เดญเดพเดทเดฏเดฟเดฒเตเดฒเตเดจเตเดจเต เดเดจเดฟเดเตเดเต เดคเตเดจเตเดจเตเดจเตเดจเต. ntplib เดเตเดกเตเดฎเดพเดฏเตเดณเตเดณ เดเตเดกเดฟเดจเตเดฑเต เดธเดพเดฎเตเดฏเด เดเดธเตเดตเดพเดฆเดเตผ เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเด - เดเดพเตป เด
เดคเดฟเตฝ เดจเดฟเดจเตเดจเต โเดชเตเดฐเดเตเดฆเดฟเดคเดจเดพเดฏเดฟโ.
เด
เดชเตเดชเตเตพ เดเดจเตเดคเดพเดฃเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ NTP? เดเตเดคเตเดฏเดฎเดพเดฏ เดธเดฎเดฏ เดธเตเตผเดตเดฑเตเดเดณเตเดฎเดพเดฏเตเดณเตเดณ เดเดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดชเตเดฐเตเดเตเดเตเดเตเดเตเตพ เดเดฃเต NTP. เด เดชเตเดฐเตเดเตเดเตเดเตเดเตเตพ เดชเดฒ เดเดงเตเดจเดฟเด เดฎเตเดทเตเดจเตเดเดณเดฟเดฒเตเด เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดตเดฟเตปเดกเตเดธเดฟเดฒเต w32tm เดธเตเดตเดจเด.
NTP เดชเตเดฐเตเดเตเดเตเดเตเดเตเดณเดฟเดจเตเดฑเต เดเดเต 5 เดชเดคเดฟเดชเตเดชเตเดเดณเตเดฃเตเดเต. เดเดฆเตเดฏ เดชเดคเดฟเดชเตเดชเต 0 (1985, RFC958)), เดจเดฟเดฒเดตเดฟเตฝ เดเดพเดฒเดนเดฐเดฃเดชเตเดชเตเดเตเดเดคเดพเดฏเดฟ เดเดฃเดเตเดเดพเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต. เดเดชเตเดชเตเตพ เดชเตเดคเดฟเดฏเดต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, 1st (1988, RFC1059), 2nd (1989, RFC1119), 3rd (1992, RFC1305), 4th (1996, RFC2030). 1-4 เดชเดคเดฟเดชเตเดชเตเดเตพ เดชเดฐเดธเตเดชเดฐเด เดชเตเดฐเตเดคเตเดคเดชเตเดชเตเดเตเดจเตเดจเต; เด เดต เดธเตเตผเดตเตผ เดชเตเดฐเดตเตผเดคเตเดคเดจ เด เตฝเดเตเดฐเดฟเดคเดเตเดเดณเดฟเตฝ เดฎเดพเดคเตเดฐเด เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
เดชเดพเดเตเดเตเดเต เดซเตเตผเดฎเดพเดฑเตเดฑเต
เดเตเดคเดฟเดชเตเดชเต เดธเตเดเดเด (เดคเดฟเดฐเตเดคเตเดคเตฝ เดธเตเดเดเด) - เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เดเดเตเดชเดจเดคเตเดคเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดจเดฎเตเดชเตผ. เด
เตผเดคเตเดฅเด:
- 0 - เดคเดฟเดฐเตเดคเตเดคเดฒเตเดเดณเตเดจเตเดจเตเดฎเดฟเดฒเตเดฒ
- 1 - เดฆเดฟเดตเดธเดคเตเดคเดฟเดจเตเดฑเต เด เดตเดธเดพเดจ เดฎเดฟเดจเดฟเดฑเตเดฑเดฟเตฝ 61 เดธเตเดเตเดเตปเดกเต เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
- 2 - เดฆเดฟเดตเดธเดคเตเดคเดฟเดจเตเดฑเต เด เดตเดธเดพเดจ เดฎเดฟเดจเดฟเดฑเตเดฑเดฟเตฝ 59 เดธเตเดเตเดเตปเดกเต เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
- 3 - เดธเตเตผเดตเตผ เดคเดเดฐเดพเตผ (เดธเดฎเดฏเด เดธเดฎเดจเตเดตเดฏเดฟเดชเตเดชเดฟเดเตเดเดฟเดเตเดเดฟเดฒเตเดฒ)
เดชเดคเดฟเดชเตเดชเต เดจเดฎเตเดชเตผ (เดชเดคเดฟเดชเตเดชเต เดจเดฎเตเดชเตผ) - NTP เดชเตเดฐเตเดเตเดเตเดเตเดเตเตพ เดชเดคเดฟเดชเตเดชเต เดจเดฎเตเดชเตผ (1-4).
เดซเดพเดทเตป (เดฎเตเดกเต) - เดชเดพเดเตเดเดฑเตเดฑเต เด เดฏเดเตเดเดฏเดพเดณเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดจ เดฐเตเดคเดฟ. 0 เดฎเตเดคเตฝ 7 เดตเดฐเตเดฏเตเดณเตเดณ เดฎเตเดฒเตเดฏเด, เดเดฑเตเดฑเดตเตเด เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฏเดคเต:
- 3 - เดเตเดฒเดฏเดจเตเดฑเต
- 4 - เดธเตเตผเดตเตผ
- 5 - เดชเตเดฐเดเตเดทเตเดชเดฃ เดฎเตเดกเต
เดธเตเดเตเดฐเดพเดฑเตเดฑเด (เดฒเตเดฏเดฑเดฟเดเดเต เดฒเตเดตเตฝ) - เดธเตเตผเดตเดฑเดฟเดจเตเด เดฑเดซเดฑเตปเดธเต เดเตเดฒเตเดเตเดเตเด เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดเดจเตเดฑเตผเดฎเตเดกเดฟเดฏเดฑเตเดฑเต เดฒเตเดฏเดฑเตเดเดณเตเดเต เดเดฃเตเดฃเด (1 - เดธเตเตผเดตเตผ เดฑเดซเดฑเตปเดธเต เดเตเดฒเตเดเตเดเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเตเดฐเดฟเดเตเดเต เดกเดพเดฑเตเดฑ เดเดเตเดเตเดเตเดจเตเดจเต, 2 - เดฒเตเดฏเตผ 1 เดเดณเตเดณ เดธเตเตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเตผเดตเตผ เดกเดพเดฑเตเดฑ เดเดเตเดเตเดเตเดจเตเดจเต, เดฎเตเดคเดฒเดพเดฏเดต).
เดชเตเตพ เดคเตเดเตผเดเตเดเดฏเดพเดฏ เดธเดจเตเดฆเตเดถเดเตเดเตพเดเตเดเดฟเดเดฏเดฟเดฒเตเดณเตเดณ เดชเดฐเดฎเดพเดตเดงเดฟ เดเดเดตเตเดณเดฏเต เดชเตเดฐเดคเดฟเดจเดฟเดงเตเดเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดเดชเตเดชเดฟเดเตเด เดชเตเตผเดฃเตเดฃเดธเดเดเตเดฏเดฏเดพเดฃเต. เดเตปโเดเดฟโเดชเดฟ เดเตเดฒเดฏเดจเตเดฑเต เดธเตเตผโเดตเดฑเดฟเดจเต เดชเตเตพ เดเตเดฏเตเดฏเดพเตป เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจ เดเดเดตเตเดณ เดเดตเดฟเดเต เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เดเตปโเดเดฟโเดชเดฟ เดธเตเตผโเดตเตผ เดชเตเตพ เดเตเดฏเตเดฏเตเดฎเตเดจเตเดจเต เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจ เดเดเดตเตเดณ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดจเตเดจเต. เดฎเตเดฒเตเดฏเด เดธเตเดเตเดเตปเดกเตเดเดณเตเดเต เดฌเตเดจเดฑเดฟ เดฒเตเดเดฐเดฟเดคเดคเตเดคเดฟเดจเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต.
เดเตเดคเดค (เดเตเดคเตเดฏเดค) เดเดจเตเดจเดคเต เดธเดฟเดธเตเดฑเตเดฑเด เดเตเดฒเตเดเตเดเดฟเดจเตเดฑเต เดเตเดคเตเดฏเดคเดฏเต เดชเตเดฐเดคเดฟเดจเดฟเดงเตเดเดฐเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เด
เดเดฏเดพเดณเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏ เดชเตเตผเดฃเตเดฃเดธเดเดเตเดฏเดฏเดพเดฃเต. เดฎเตเดฒเตเดฏเด เดธเตเดเตเดเตปเดกเตเดเดณเตเดเต เดฌเตเดจเดฑเดฟ เดฒเตเดเดฐเดฟเดคเดคเตเดคเดฟเดจเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต.
เดฑเตเดเตเดเต เดเดพเดฒเดคเดพเดฎเดธเด (เดธเตเตผเดตเตผ เดเดพเดฒเดคเดพเดฎเดธเด) - เดเตเดฒเตเดเตเดเต เดฑเตเดกเดฟเดเดเตเดเตพ เดเตปโเดเดฟโเดชเดฟ เดธเตเตผโเดตเดฑเดฟเดฒเตเดเตเดเต เดเดคเตเดคเดพเตป เดเดเตเดเตเดเตเดจเตเดจ เดธเดฎเดฏเด, เดธเตเดเตเดเตปเดกเตเดเดณเตเดเต เดเดฐเต เดจเดฟเดถเตเดเดฟเดค เดชเตเดฏเดฟเดจเตเดฑเต เดจเดฎเตเดชเดฑเดพเดฏเดฟ.
เดฑเตเดเตเดเต เดกเดฟเดธเตเดชเตผเดทเตป (เดธเตเตผเดตเตผ เดธเตโเดชเตเดฐเตเดกเต) - NTP เดธเตเตผเดตเตผ เดเตเดฒเตเดเตเดเต เดฑเตเดกเดฟเดเดเตเดเดณเตเดเต เดเดฐเต เดจเดฟเดถเตเดเดฟเดค เดชเตเดฏเดฟเดจเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตเดเตเดเตปเดกเตเดเดณเตเดเต เดเดฃเตเดฃเด.
เดฑเตเดซเต เดเดกเดฟ (เดเดฑเดตเดฟเด เดเดกเดจเตเดฑเดฟเดซเดฏเตผ) - เดเตเดฒเตเดเตเดเต เดเดกเดฟ. เดธเตเตผเดตเดฑเดฟเดจเต เดธเตเดเตเดฐเดพเดฑเตเดฑเด 1 เดเดฃเตเดเตเดเดฟเตฝ, ref 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
เดธเตเตผเดตเดฑเดฟเดฒเตเดเตเดเต เดเดฐเต เดชเดพเดเตเดเดฑเตเดฑเต เด
เดฏเดฏเตโเดเตเดเดพเดจเตเด (เดธเตเดตเตเดเดฐเดฟเดเตเดเดพเดจเตเด) เดเดเตเดเตพเดเตเดเต เด
เดคเต เดเดฐเต เดฌเตเดฑเตเดฑเต เด
เดฑเต เดเดเตเดเดฟ เดฎเดพเดฑเตเดฑเดพเตป เดเดดเดฟเดฏเดฃเด.
เด (เดเดชเตเดชเด เดฑเดฟเดตเตเดดเตเดธเต) เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดเดเตเดเตพ เดฐเดฃเตเดเต เดซเดเดเตเดทเดจเตเดเตพ เดเดดเตเดคเตเด - เดชเดพเดเตเดเต () เดเด เด
เตบเดชเดพเดเตเดเต ():
เดชเดพเดเตเดเต เดซเดเดเตเดทเตป
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