DatagramTunneler

Programa cliente/servidor simples de plataforma cruzada que encaminha datagramas UDP através de uma conexão TCP (também conhecida como túnel). O cliente se junta a um grupo multicast e encaminha os datagramas recebidos para o servidor, que por sua vez os transmite em sua própria sub-rede.
- Projetado com simplicidade em mente
- Testado em OSX 10.13.3 , Ubuntu 16.04 e Centos 7.4
- NÃO é compatível com Windows
Contente
Requisitos
Instalação
Sinopse
Exemplos
Como funciona?
O protocolo DTEP
Licenciamento
Requisitos
- Um computador executando uma distribuição Linux ou Mac OS
- Um compilador c++
Instalação em 10 segundos
- Baixe ou clone o repositório.
- Entre no repositório:
cd <path_to_the_repo>/DatagramTunneler
- Construa o DatagramTunneler simplesmente executando make:
- Você está pronto para executar o binário DatagramTunneler:
./bin/DatagramTunneler -h
Para mais informações sobre como executá-lo, confira a sinopse abaixo
Sinopse
Para usar o DatagramTunneler você precisa iniciar primeiro o lado do servidor e depois o lado do cliente. Caso contrário, o cliente simplesmente não conseguirá se conectar ao servidor e sairá imediatamente.
Servidor
dgramtunneler --server -i <udp_iface_ip> -t <tcp_listen_port> [-u <udp_dst_ip>:<port>]
- <udp_iface_ip> : interface usada para publicar os datagramas encaminhados
- <tcp_listen_port> : porta tcp usada para escutar conexões do cliente
- <udp_dst_ip>:<port> : (opcional) IP de destino udp e porta onde o servidor está publicando os datagramas encaminhados. Se não forem fornecidos, os datagramas serão publicados no mesmo canal ao qual o cliente ingressou.
Cliente
dgramtunneler --client -i <udp_iface_ip> -t <tcp_srv_ip>:<tcp_srv_port> -u <udp_dst_ip>:<port>
- <udp_iface_ip> : interface usada para ingressar no canal multicast fornecido por -u
- <tcp_srv_ip>:<port> : IP e porta do servidor para o qual o datagrama será encaminhado
- <udp_dst_ip> : <port> : IP de destino udp e porta do canal ao qual queremos ingressar
Exemplos
(Não se esqueça de dar uma estrelinha se esta ferramenta for útil para você :]) lado do servidor:
./bin/datagramtunneler --server -i 192.168.0.104 -u 228.14.28.52:1234 -t 28052
lado do cliente:
./bin/datagramtunneler --client -i 192.168.0.105 -u 228.1.2.3:7437 -t 192.168.0.104:28052
Como funciona?
O objetivo do DatagramTunneler é transferir dados multicast de uma sub-rede A para outra sub-rede B onde esse canal multicast não está disponível. Para conseguir isso, o DatagramTunneler é dividido em 2 lados: um lado do cliente e um lado do servidor, conforme mostrado no diagrama abaixo: 
O lado do cliente
O lado do cliente deve ser executado na sub-rede onde o canal multicast pode ser associado. Uma vez iniciado, ele fará o seguinte:
- conectar-se ao servidor DatagramListener (TCP)
- junte-se ao canal multicast (UDP)
- encaminhar todos os datagramas recebidos para o servidor usando a conexão TCP estabelecida. Os datagramas são transmitidos através do TCP usando o Datagram Tunneler Encapsulation Protocol (ou DTEP).
O lado do servidor
O lado do servidor deve ser executado na sub-rede onde o multicast não está disponível. Uma vez iniciado, ele fará o seguinte:
- escute uma conexão de cliente (observe que apenas uma conexão é aceita durante todo o tempo de vida das instâncias de Servidor/Cliente. Depois que o túnel é desconectado, ambas as extremidades saem.
- uma vez estabelecida uma conexão com um cliente, ele publicará todos os datagramas enviados pelo cliente para um canal multicast. Esse canal pode ser qualquer coisa especificada ao iniciar o servidor ou, se não for especificado, usará o mesmo canal multicast codificado com o datagrama recebido (cf. DTEP).
O protocolo de encapsulamento de túnel de datagrama (DTEP)
O Datagram Tunneler Protocol ou DTEP é um protocolo binário simples, descrito pelo seguinte diagrama: 
Um pacote DTEP possui um cabeçalho de 1 byte especificando o tipo de carga que ele contém.
Tipo de pacote 0x00 = HEARTBEAT
Este tipo de pacote não possui carga útil. Ele é enviado pelo cliente ao servidor e ajuda a garantir que ambas as extremidades da conexão saibam se a outra extremidade está ativa.
Tipo de pacote 0x01 = DATAGRAMA
Este pacote encapsula o datagrama observado pelo cliente. Aqui está sua descrição completa: 
Embora este diagrama deva ser autoexplicativo, aqui está uma análise de todos os campos:
- Comprimento do datagrama : número de bytes do datagrama encapsulado (o comprimento do cabeçalho DTEP NÃO está incluído)
- Endereço do canal UDP : endereço de destino do grupo multicast ao qual o cliente se juntou para receber aquele datagrama
- Porta do Canal UDP : porta de destino do grupo multicast ao qual o cliente se juntou para receber aquele datagrama
- Datagrama UDP encapsulado : datagrama real recebido pelo cliente do canal multicast
Licenciamento
Cf LICENÇA