EventMachine dynamic port forwarding

D

Diego Bernardes

I need a dynamic port forwarding application, i listem packets from a ip
on port 10000, then i need not just send the data i receive to other
ports, but i need first create a connection on this new port first and
listen to any connection on this port, if i get any thing on this port i
send back through the first connection.

Its easy to create a single server with EventMachine like the code
below:

require 'rubygems'
require 'eventmachine'

module Echo
def receive_data data
send_data data
end
end

EM.run {
EM.start_server "0.0.0.0", 10000, Echo
}


But how could i create another server inside the current server?
 
J

Justin Collins

Diego said:
I need a dynamic port forwarding application, i listem packets from a ip
on port 10000, then i need not just send the data i receive to other
ports, but i need first create a connection on this new port first and
listen to any connection on this port, if i get any thing on this port i
send back through the first connection.

Its easy to create a single server with EventMachine like the code
below:

require 'rubygems'
require 'eventmachine'

module Echo
def receive_data data
send_data data
end
end

EM.run {
EM.start_server "0.0.0.0", 10000, Echo
}


But how could i create another server inside the current server?

Well, you can start as many servers as you would like, but it sounds
more like you need to open a connection to a server, not start another.
You can use EventMachine::connect for that.

I believe you can do something like (completely untested):

require 'rubygems'
require 'eventmachine'

module Other
attr_accessor :sender

def receive_data data
self.sender.send_data data
end
end

module Echo
def post_init
@other_side = EM.connect "0.0.0.0", 10001, Other
@other_side.sender = self
end

def receive_data data
@other_side.send_data data
end
end

EM.run {
EM.start_server "0.0.0.0", 10000, Echo
}


-Justin
 
D

Diego Bernardes

Yea, i said wrong, its start a new connection, not a new server.

The example you write, run without error, but dont create the new
connection, but i got the idea, the problem with eventmachine is the
documentation =/
 
D

Diego Bernardes

Diego said:
Yea, i said wrong, its start a new connection, not a new server.

The example you write, run without error, but dont create the new
connection, but i got the idea, the problem with eventmachine is the
documentation =/

Now im with a question, when i use EventMachine::connect, i connect to a
tcp port, my problem is, i need create a tcp port to others process
connect, so i think its the start server, no?
 
D

Diego Bernardes

Diego said:
Now im with a question, when i use EventMachine::connect, i connect to a
tcp port, my problem is, i need create a tcp port to others process
connect, so i think its the start server, no?

Someone?
 
R

Roger Pack

Diego said:
I need a dynamic port forwarding application, i listem packets from a ip
on port 10000, then i need not just send the data i receive to other
ports, but i need first create a connection on this new port first and
listen to any connection on this port, if i get any thing on this port i
send back through the first connection.

http://github.com/igrigorik/em-proxy/tree/master/
also rtunnel.
GL.
-=r
 
D

Diego Bernardes

I got what i need :)

the code is below:


require 'rubygems'
require 'eventmachine'

class VirtualPort < EventMachine::Connection
attr_accessor :sender

def initialize *args
super

@sender = args.first
@sender.create_client(self)
end

def receive_data data
send_data "Você digitou: " + data
puts "Cliente: " + data
@sender.send_data(data)
end
end

class Server < EventMachine::Connection
attr_accessor :client

def initialize *args
super
end

def create_client(client)
@client = client
end

def post_init
puts "Acabei de me conectar"
EM.start_server "0.0.0.0", 20000, VirtualPort, self
end

def receive_data data
send_data "Você digitou: " + data
puts "Server: " + data
if(@client)
@client.send_data(data)
end
end
end

EM.run {
EM.start_server "0.0.0.0", 10000, Server
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top