您的位置:首页 > 编程语言 > Ruby

ruby通过telnet读取互联网时间

2014-12-12 11:49 148 查看
在前面的博文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的秒数,即得当前时间相对的秒数.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: