ruby通过telnet读取互联网时间

时间:2023-01-17 14:25:01

在前面的博文ntp服务器也谈逆向工程中,本猫曾经武断的认为telnet是无法连接到ntp服务器的.因为当时是这样连接的:

telnet time.nist.gov 123,端口号123是在/etc/services服务表里查询到的ntp的服务端口:

ntp             123/tcp

ntp             123/udp                         # Network Time Protocol

可是time.nist.gov开放的端口不是123,而是37,从服务表里可以看到该服务名称为time:

time            37/tcp          timserver

time            37/udp          timserver

咋回事呢?不知道啊!time.nist.gov压根不是ntp服务器吗?可能123是ntp的协议端口而不是实际可连接的端口.下面上ruby的telnet读取互联网时间的代码:

#!/usr/bin/ruby

require 'net/telnet'
time_svr = "time.nist.gov"

#tn = Net::Telnet.new(Host:time_svr,Port:"time",Timeout:60,Telnetmode:false)
tn = Net::Telnet.new("Host"=>time_svr,"Port"=>"time","Timeout"=>60,"Telnetmode"=>false)
msg = tn.sock.recv(4).unpack('N')[0]
remote = Time.at(msg - 2208988800).strftime("%H:%M:%S")

puts remote

执行结果如下:

wisy@wisy-ThinkPad-X61:~/src/ruby_src$ ./telnet.rb

11:45:17

老的代码是直接tn.recv,但现在recv放在了tn.sock里.msg是返回的4个大尾字节,减去1970-01-01 0:0:0的秒数,即得当前时间相对的秒数.