import socket
import struct
import time
import json
import sys
def get_ntp_time(ntp_server):
ntp_packet = b'\x1b' + 47 * b'\0'
try:
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.settimeout(2.0)
client.sendto(ntp_packet, (ntp_server, 123))
data, addr = client.recvfrom(1024)
if data:
unpacked_data = struct.unpack('!12I', data)
transmit_timestamp = float(unpacked_data[10]) + float(unpacked_data[11]) / 2**32
ntp_time = transmit_timestamp - 2208988800
return ntp_time
except Exception as e:
print("Error:", str(e))
finally:
client.close()
return None
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python ntp_server.py NTP_SERVER_ADDRESS")
sys.exit(1)
ntp_server = sys.argv[1]
ntp_time = get_ntp_time(ntp_server)
if ntp_time is not None:
json_output = {
"ntp_server": ntp_server,
"timestamp": ntp_time*1000
}
print(json.dumps(json_output, indent=2))
else:
print("Failed to get NTP time.")