python3 - <<'PY'
import socket
import struct
import time
from datetime import datetime, timezone
for host in ["10.3.2.1", "10.3.2.252"]:
print(f"\n===== NTP {host} =====", flush=True)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(3)
try:
started = time.time()
sock.sendto(b'\x23' + 47 * b'\0', (host, 123))
data, addr = sock.recvfrom(512)
if len(data) < 48:
raise ValueError("Invalid NTP response")
mode = data[0] & 7
leap = data[0] >> 6
stratum = data[1]
if mode != 4 or leap == 3 or not 1 <= stratum <= 15:
raise ValueError("Server is not synchronized")
sec, frac = struct.unpack("!II", data[40:48])
server_time = sec - 2208988800 + frac / 2**32
received = time.time()
print("STATUS: NTP AVAILABLE")
print("Stratum:", stratum)
print("Server time:", datetime.fromtimestamp(
server_time, timezone.utc
).isoformat())
print("Approx offset:", round(
server_time - ((started + received) / 2), 2
), "seconds")
print("Round-trip:", round(received-started, 3), "seconds")
except Exception as e:
print("STATUS: NO VALID RESPONSE")
print("Reason:", e)
finally:
sock.close()
PY