1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
local socket = require("socket") local udp = socket.udp() local request = string.char( 227, 0, 6, 236, 0,0,0,0,0,0,0,0, 49, 78, 49, 52, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ) -- udp-request local response -- udp-response local uint32_from_bytes = function(bytes) return (((bytes:byte(1)*256 + bytes:byte(2))*256 + bytes:byte(3))*256 + bytes:byte(4)) end udp:settimeout(1) -- timeout 1s udp:setsockname("*",0) --assert(udp:setpeername("192.168.0.254",123)) -- mon routeur privé assert(udp:setpeername("time.windows.com",123)) -- serveur NTP de Windows for i = 1, 3, 1 do -- 3 tentatives de lecture du serveur NTP udp:send(request) response = udp:receive() if response then break end end if not response then print("timeout") else local ntp_timestamp = uint32_from_bytes(response:sub(41,44)) -- NTP-timestamp = seconds since 1.1.1900 local unix_timestamp = ntp_timestamp - 2208988800 -- UNIX-timestamp = seconds since 1.1.1970 print(unix_timestamp) end |