らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Python の ntplib を使った NTP クライアントサンプル

Python には PyPintplib というライブラリがあり、手軽に NTP の動作をコーディングすることが出来ます。

サンプルコード

サンプルコードは以下の通りです。 NTP バージョンは「4」でハードコードしています。

#!/usr/bin/env python

import datetime
import ntplib
import sys
from time import ctime

try:
    version = 4
    client = ntplib.NTPClient()
    response = client.request(sys.argv[1], version)
    nowtime = datetime.datetime.strptime(ctime(response.tx_time), "%a %b %d %H:%M:%S %Y")
    print("Time       : " + nowtime.strftime('%Y/%m/%d %H:%M:%S'))
    print("Version    : " + str(response.version))
    print("Ref.ID     : " + ntplib.ref_id_to_text(response.ref_id))
    print("Offset     : " + str(response.offset))
    print("Leap       : " + ntplib.leap_to_text(response.leap))
    print("Root Delay : " + str(response.root_delay))
except Exception as e:
    print(e)
    sys.exit(1)

実行例

実行例は以下の通りです。

# python ntp-tester.py time4.google.com
Time       : 2019/11/23 19:44:07
Version    : 4
Ref.ID     : 71.79.79.71
Offset     : -0.0003147125244140625
Leap       : no warning
Root Delay : 0.0

宛先と時刻同期出来ない場合は以下のようなエラーになります。

# python ntp-tester.py 192.0.2.1
No response received from 192.0.2.1.