JavaFree.org | RubyOnBr.org

Socket em Ruby - Criar um redirecionador de portas

Acompanhar Socket em Ruby - Criar um redirecionador de portas 7 posts, 3 participantes

Avatar CarLN 5 posts

Boa noite pessoal, tudo bem?

Tenho várias experiências com programação, mas ainda sou novato em Ruby e este me fascinou muito. Facilita MUITO a criação de praticamente qualquer coisa.

Eu estou interessado em criar um redirecionador de portas/ip. Explico melhor: temos um programa rodando na porta 80. Aí quero fazer com que qualquer requisição da porta 8100 vá para essa porta 80. Dessa maneira o cliente pode usar ambas portas que dará o mesmo resultado.

Alguém tem algum exemplo disso? Tentei algumas coisas aqui… mas nada com sucesso. Os exemplos que têm na documentação costumam ser simples demais hehehe. Ah sim… lembrando: para qualquer tipo de conexão TCP. Se der certo e ficar legal, aventurarei-me ao UDP :D

Muito obrigado pela atenção…

CarLN

 
Avatar Daniel Libanori 196 posts

CarLN

A idéia me parece bem legal, não é tão complicado, fiquei um tempinho aqui tentando, mas estou com problema ao abrir a conexão com o servidor original, no seu caso, o da porta 80. Quando eu conseguir algo, mando o código.

Como solução rápida, você pode utilizar o iptables, mais simples, fácil e rápido, não? Mas se o seu lance é experimentar os sockets do ruby, vá fundo ;)

 
Avatar CarLN 5 posts

Bom dia Daniel, tudo bem?

Então, eu já fiz redirecionamento de várias formas: Delphi e IPTables. O que me chamou bastante a atenção foi a possibilidade de rodar o código onde você quiser e ainda ser de fácil manutenção… vixie, estou migrando tanta coisa que fiz para Ruby… é o bixo hehehe.

Eu tentei fazer algo meio porco, mas sem sucesso…

Estou meio que na tentativa de erro mesmo… mas como não tenho muita noção de fazer na unha, estou perdido. No Delphi eu usei os componentes do Indy para fazer o que queria… e foi mamão com açúcar né.

Como minha intenção é deixar a manutenção e utilitários o mais portátil e eficiente possível, fui com a cara de Ruby :D

Agradeço desde já a atenção.

CarLN

 
Avatar Daniel Libanori 196 posts

CarLN,

Cara, eu cheguei praticamente no mesmo código que você, porém, a coisa empaca no client.gets (eu tentei com read também). Tentei olhar o fonte do webrick e do net/http mas fiz isso bem nas coxas, mas acho que a solução está ali ;)

Se eu conseguir algo eu posto aqui.

Eu já trabalhei com o UDPSocket com uma aplicação que recebia dados de estações GPRS. Usando a sua expressão, foi “mamão com açucar” também.

 
Avatar CarLN 5 posts

Olá Daniel!

Cara, está DIFÍCIL mesmo achar algo de exemplo… putz grila. Estou quebrando a cabeça aqui rs!!! Já deixei a mesma mensagem em vários fórums de Ruby e até agora nada!

Mas de qualquer maneira, valeu mesmo pelo o que você contribuiu e contribuirá :D

Estou aqui tentando na mão mesmo…

 
Avatar CarLN 5 posts

Tentei esse código aqui que estou fazendo… deu certo algumas vezes, mas está instável… ainda não entendo como faço para esperar receber todos os dados, enviar, tratar… T_T

 
Avatar Ronie Uliana 891 posts

Recomendo a leitura disso aqui, pode dar alguma luz.

Se entendi bem, vai ser o caso de usar sockets não bloqueantes (não sei se vai precisar, pra ser honesto). Daqui a pouco vou tentar aqui e posto o que encontrei (se é que vou encontrar algo).