Python 使用ntplib库同步校准当地时间的方法 (NTP)

NTP(Network Time Protocol)是由美国德拉瓦大学的David L. Mills教授于1985年提出,设计用来在Internet上使不同的机器能维持相同时间的一种通讯协定。

 

NTP估算封包在网络上的往返延迟,独立地估算计算机时钟偏差,从而实现在网络上的高精准度计算机校时。

NTP服务在Linux系统比较常见,其实Python也一样,可网上搜索"python获取时间"时,很多是解析页面获取时间的笨办法,殊不知Python也可使用NTP服务进行时间同步获取精确时间、只需要使用ntplib库即可实现。

 

ntplib库用法简介

安装ntplib:

easy_install ntplib

pip install ntplib

代码解释:

import os 
import time 
import ntplib 



c = ntplib.NTPClient() 
response = c.request('pool.ntp.org') 

ts = response.tx_time 

_date = time.strftime('%Y-%m-%d',time.localtime(ts)) 
_time = time.strftime('%X',time.localtime(ts)) 

os.system('date {} && time {}'.format(_date,_time)) 

 

源码实例:

Python 使用ntplib库同步校准当地时间的方法 (NTP)_第1张图片

#用于检查时间偏移的函数
def check_time(self):
    #确保我们的蜜罐时间是一致的,与实际时间相差不太远。

    poll = self.config['timecheck']['poll']
    ntp_poll = self.config['timecheck']['ntp_pool']
    while True:
        clnt = ntplib.NTPClient()
        try:
            response = clnt.request(ntp_poll, version=3)
            diff = response.offset
            if abs(diff) >= 15:
                logger.error('Timings found to be far off, shutting down drone ({0})'.format(diff))
                sys.exit(1)
            else:
                logger.debug('Polled ntp server and found that drone has {0} seconds offset.'.format(diff))
        except (ntplib.NTPException, _socket.error) as ex:
            logger.warning('Error while polling ntp server: {0}'.format(ex))
        gevent.sleep(poll * 60 * 60)

 

你可能感兴趣的:(Python)