开发者

Forwarding requests UDPSocket

开发者 https://www.devze.com 2023-01-27 12:27 出处:网络
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 destina

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.


The obvious problems are:

  1. UDP comms are usually connectionless, use the 4 argument version of send instead of connect
  2. You're not receiving any data from the socket talking to 8.8.8.8
  3. You're not sending any data back (#send_data) to the original client

This 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
0

精彩评论

暂无评论...
验证码 换一张
取 消