当Windows机器从NTP服务器请求时间时,我正试图向它发送一个伪造的时间。
到目前为止,我的服务器会显示数据包并发回数据,但我似乎不知道我需要发送什么才能给Windows一个假时间。我尝试捕获要发送的合法数据包,但失败了。
在这个例子中,我只是发送空白,我试图弄清楚要发送什么数据来告诉计算机,例如时间是上午10:00,而实际上是下午12点。
我打算在局域网上伪造DNS查询,将其重定向到该服务器,该服务器将以错误的时间响应。
我听说这是可以做到的,但从未见过这样做的工具,所以这就是我现在要做的。
require 'socket'
class UDPServer
def initialize(port)
@port = port
end
def start
@socket = UDPSocket.new
@socket.bind('', @port)
data = " "
while true
packet = @socket.recvfrom(1024)
puts packet
@socket.send("${data}", 0, '10.0.0.16', "#{@port}")
end
end
end
server = UDPServer.new(123)
server.start
这是可以做到的。你需要回复客户的请求。在该回复中,您将需要使用(您的代码不这样做):
T1 = client timestamp at time of departure of request packet from client
and
T2 = server timestamp at time of ARRIVAL of request packet at server
and
T3 = server timestamp at time of departure of REPLY packet from server (ca be thee same s T2).
我在你的代码中没有看到这一点。此外,pkt的其余部分需要是";OK"--不确定你的是不是(似乎不是)。