Come realizzare un client NTP in Python

Cerca

In questo post vediamo come realizzare, utilizzando poche righe di codice, uno script Python che agisca da client NTP.

Soluzione 1

In questa prima soluzione ci avvaliamo semplicemente di un socket per inviare una query al server NTP.

				
					#!/usr/bin/env python
from contextlib import closing
from socket import socket, AF_INET, SOCK_DGRAM
import struct
import time
   
NTP_PACKET_FORMAT = "!12I"
NTP_DELTA = 2208988800  # 1970-01-01 00:00:00
NTP_QUERY = b'\x1b' + 47 * b'\0'  
    
def ntp_time(host="pool.ntp.org", port=123):
    with closing(socket( AF_INET, SOCK_DGRAM)) as s:
        s.settimeout(5)
        s.sendto(NTP_QUERY, (host, port))
        msg, address = s.recvfrom(1024)
    unpacked = struct.unpack(NTP_PACKET_FORMAT,
                   msg[0:struct.calcsize(NTP_PACKET_FORMAT)])
    return unpacked[10] + float(unpacked[11]) / 2**32 - NTP_DELTA
if __name__ == "__main__":
    print(time.ctime(ntp_time()))
				
			

Soluzione 2

Come soluzione alternativa, se non vogliamo gestire direttamente il socket per comunicare con il server NTP, possiamo utilizzare ntplib. In questo caso il codice risulterebbe il seguente:

				
					import ntplib
from time import ctime
c = ntplib.NTPClient()
response = c.request('pool.ntp.org')
print(ctime(response.tx_time))
				
			

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

Most Recent

Come creare un watchdog per Cups

In questo scenario ci troviamo su una macchina Linux in cui abbiamo bisogno di monitorare lo stato di Cups e, in caso di crash del

Partners