(更新日: 2018年7月31日 )
はじめに
企業内だと、firewallによって外部のntp serverに直接アクセスできない場合があります。ntp はUDP 123 port を使うため、proxy serverが許さないとproxy 越えは難しいようです。
実際には、ルータやスイッチングHUBが ntp server機能を持つ場合もあるのですが、ここではhttp経由でntp serviceにアクセスしてPCの時刻合わせを行うことを考えます。
http経由でのntp serviceの利用
NICTの日本標準時G のhttps/http を介してアクセスされる場合にPOSIX形式でタイムスタンプを返すURLが記載されています。これを利用します。
POSIX形式のページをダウンロードするにはRubyのnokogiri を用いました。
時刻合わせには Linuxの dateコマンドを用いました。これはsuper user権限(sudo)で実行します。
ruby のコード
ruby 1.9以降を用いています。
#!/usr/bin/env ruby1.9.3
# -*- coding: utf-8 -*-
#
# $Id$
=begin
Thanks:
http://husky.mydns.jp/huskysmemo/2010/02/ntpproxy.html
=end
require "open-uri"
require "rubygems"
require "nokogiri"
url = "https://ntp-a1.nict.go.jp/cgi-bin/jst"
charset = nil
html = open(url, :proxy => 'http://proxy.server.url:PORT') do |f|
charset = f.charset
f.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)
time = doc.css("body").text.gsub(/[\r\n]/,'').to_f
local_time = Time.at(time)
printf("%s\n", local_time.strftime("Local Time: %Y年%m月%d日%H時%M分%S秒"))
time_str = local_time.strftime("%m%d%H%M.%S")
system("date") # 現在のPCの時刻
puts command = "date #{time_str}"
system(command) # 時刻あわせ
参考にしたページ
- NTPでのProxy越え (huskyの備忘録)
- RubyのHTML/XML解析ライブラリNokogiriを試す。 (タチコマ好きなエンジニアのブログ)














