from datetime import datetime, timedelta, timezone
from socket import socket, getaddrinfo, AF_INET, SOCK_DGRAM
from struct import unpack
def ntp_date(host="pool.ntp.org"):
NTP_QUERY = bytearray(48)
NTP_QUERY[0] = 0x1B
addr = getaddrinfo(host, 123)[0][-1]
with socket(AF_INET, SOCK_DGRAM) as sock:
sock.settimeout(1)
res = sock.sendto(NTP_QUERY, addr)
try:
msg = sock.recv(48)
except TimeoutError:
return None
date = unpack("!I", msg[40:44])[0]
# NTPs EPOCH starts at 1900-01-01
return datetime(1900, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=date)
Comments
0 B
|👍
/👎