0

ポート(53)でリッスンし、データを受信して​​から別の場所(Google DNSサーバー-8.8.8.8)に送信する基本的なrubyプログラムがあります。応答が元の宛先に戻らないか、正しく転送されていません。

これがコードです。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

デバッグする理由やヒントについての考えは、非常に高く評価されます。

4

1 に答える 1

5

明らかな問題は次のとおりです。

  1. UDP通信は通常コネクションレス型です。send代わりにの4引数バージョンを使用してくださいconnect
  2. 8.8.8.8と通信しているソケットからデータを受信して​​いません
  3. #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
于 2010-12-02T13:17:59.177 に答える