Redirecionando streaming de uma porta para outra porta de outra maquina

Porque não iptables?

Recentemente me deparei com um problema: Não consegui fazer um redirecionamento com o iptables.

Como assim? Não conseguia redirecionar? Não. Porque? Não sei. Só sei que eu tinha uma “Manguinha” para chupar ;).

Para resolver isso, criei um programa que escutava numa porta e quando alguem “batesse” naquela porta, eu daria para ele o que viria da porta de outro computador.

Parece complicado? Não, nem tanto. Vamos ver.

Vamos por partes: Programa para acessar uma outra porta

Vamos fazer um programa que mande para a saída padrão o stream que vem da porta de alguma maquina remota.

Isso a gente faz fácil usando o nc, então criamos um arquivo proxy.sh assim:

#!/bin/sh

TARGET=192.168.0.101
PORT=8649

nc "${TARGET}" "${PORT}"
exec >&-
exit 0

Segundo: Como passar a saída para quem requisita uma porta?

Certo, agora precisamos “colar”( fazer um bind, anexar, etc …) o programa em uma porta.

Para isso, existe um comando(se vire para instalar na sua maquina…) que faz isso. O comando seria o socket.

Agora resta explicar o como isso funciona. Cada vez que alguem bater na porta da maquina atual(que eu executei o comando socket…), o comando socket executa o programa que você passou e a saída do programa é redirecionada para quem bateu na porta.

Assim eu consigo executar o programa proxy.sh e a saída dele vai ser mandada para quem requisitou alguma conexão pela porta, que você conectou com o comando socket.

Dito tudo isso, e você sabendo que o comando a seguir faz, eu conectei o programa a uma porta com o seguinte comando:

socket -bqflcsp /usr/libexec/proxy.sh 8649

 Para mais informações a respeito dos parâmetros, veja o man dele. Lá tem tudo bem explicado ;).

Considerações finais

Muito interessante esse comando socket. Com ele eu posso usar socket para criar um servidor, e parecendo um socket de “C“. Tá, tudo bem, bem mais fácil que “C“, mas ainda parece e funciona bem mesmo.

Além disso, fica o conhecimento de saber como fazer um servidor, se bem que esse conhecimento veio de forma bem gambiarra :p.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: