NTP から現在時刻を取得する関数

何で書いたのか記憶に無いのだが、発掘されたので.

def ntp_now(server, port = 123):
    from socket import socket, AF_INET, SOCK_DGRAM
    from struct import unpack
    from datetime import datetime
    s = socket(AF_INET, SOCK_DGRAM)
    try:
        s.sendto('\x1b' + 47 * '\0', (server, port))
        result = s.recvfrom(1024)[0]
    finally:
        s.close()
    if result:
        return datetime.fromtimestamp(unpack('!12I', result)[10] - 2208988800L)
    else:
        None

動作確認.

>>> print ntp_now('ntp.jst.mfeed.ad.jp')
2008-09-07 23:36:03