Reputation: 12660
I have a basic ruby program, that listens on a port (53), receives the data and then sends to another location (Google DNS server - 8.8.8.8). The responses are not going back to their original destination, or I'm not forwarding them correctly.
Here is the code. NB I'm using 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
Any thoughts as to why or tips to debug, would be most appreciated.
Upvotes: 0
Views: 985
Reputation: 339816
The obvious problems are:
send
instead of connect
#send_data
) to the original clientThis seems to work:
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
Upvotes: 5