Загрузка данных


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