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))
源码实例:
#用于检查时间偏移的函数
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)