ntp client in python

后端 未结 5 1304
攒了一身酷
攒了一身酷 2020-12-03 11:16

I\'ve written a ntp client in python to query a time server and display the time and the program executes but does not give me any results. I\'m using python\'s 2.7.3 integ

5条回答
  •  时光取名叫无心
    2020-12-03 11:42

    Here is a fix for the above solution, which adds fractions of seconds to the implementation and closes the socket properly. As it's actually just a handful lines of code, I didn't want to add another dependency to my project, though ntplib admittedly is probably the way to go in most cases.

    #!/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.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()).replace("  ", " ")
    

提交回复
热议问题