我有一个基本的ruby程序,它侦听端口(53),接收数据然后发送到另一个位置(Google DNS服务器 - 8.8.8.8)。回复不会回到原来的目的地,或者我没有正确转发它们。
这是代码。 NB我正在使用EventMachine
require 'rubygems'
require 'eventmachine'
module DNSServer
def post_init
puts 'connected'
end
def receive_data(data)
# Forward all data
conn = UDPSocket.new
conn.connect '8.8.8.8', 53
conn.send data, 0
conn.close
p data.unpack("H*")
end
def unbind
puts 'disconnected'
end
end
EM.run do
EM.open_datagram_socket '0.0.0.0', 53, DNSServer
end
对于调试原因或提示的任何想法都将非常感激。
答案 0 :(得分:5)
明显的问题是:
send
的4参数版本而不是connect
#send_data
)这似乎有效:
require 'socket'
require 'rubygems'
require 'eventmachine'
module DNSServer
def receive_data(data)
# Forward all data
conn = UDPSocket.new
conn.send data, 0, '8.8.8.8', 53
send_data conn.recv 4096
end
end
EM.run do
EM.open_datagram_socket '0.0.0.0', 53, DNSServer
end