Uma ferramenta de linha de comando para encapsular datagramas UDP sobre TCP.
É particularmente útil para encapsular UDP sobre SSH
A ferramenta foi projetada principalmente para o caso de uso em que você tem dois aplicativos que precisam se comunicar por UDP sem um relacionamento cliente-servidor óbvio. Ou seja, qualquer aplicação pode iniciar um pacote e deve ser configurada com o endereço da outra na inicialização (ou seja, as portas não podem ser aleatórias).
Você executa udp-over-tcp nos hosts de ambos os aplicativos. Cada instância atua como uma espécie de réplica local do aplicativo executado na outra. Se o aplicativo em um host escutar na porta UDP P, então udp-over-tcp escutará na porta UDP P no outro host e garantirá que o tráfego para a réplica P vá para a porta P do aplicativo real udp-over-tcp fará isso para as portas de ambos os aplicativos ao mesmo tempo e vinculará as portas. Ele irá efetivamente "fingir" que cada aplicativo está sendo executado localmente para o outro.
Concretamente, se o aplicativo em um host enviar um datagrama de sua porta P para a porta Q (réplica local), o datagrama chegará à porta Q do aplicativo real (remoto) com uma porta de origem P . Isso significa que um aplicativo sempre vê o mesmo endereço único (localhost) e porta (a porta do outro aplicativo), e esse mesmo par endereço-host também pode ser usado na configuração de peer do aplicativo.
Esperamos que o diagrama a seguir possa ajudar a entender as configurações udp-over-tcp :
O programa vem pré-compilado para diversas plataformas (obrigado cargo-dist!), e deve ser executável imediatamente, sem dependências.
Alternativamente, você pode instalá-lo através do Cargo com
$ cargo install udp-over-tcp Você tem um aplicativo UDP em execução no host X na porta A. Você deseja que ele se comunique com um aplicativo UDP em execução no host Y na porta B. E também deseja permitir que o aplicativo em Y se comunique com A em X. Ótimo, faça do seguinte modo:
Em qualquer host (aqui X), primeiro crie um túnel TCP para o outro host:
ssh -L 7878:127.0.0.1:7878 $Y
Em seguida, execute udp-over-tcp em ambos os hosts, um com --tcp-listen e outro com --tcp-connect . O --tcp-listen deve ser usado no host ao qual o encaminhamento permite a conexão (aqui Y). Você pode executá-los em qualquer ordem, mas a prática recomendada é ouvir primeiro:
Y $ udp-over-tcp --tcp-listen 7878 --udp-bind $A --udp-sendto $B
X $ udp-over-tcp --tcp-connect 7878 --udp-bind $B --udp-sendto $A
Em Y, isso irá escutar na porta UDP $A, encaminhá-los por TCP para X e, em seguida, entregá-los à porta UDP $A. No X, isso escutará na porta UDP $B, encaminhará aqueles por TCP para Y e, em seguida, os entregará na porta UDP $B.
Agora configure o aplicativo em X para enviar para 127.0.0.1:$B e configure o aplicativo em Y para enviar para 127.0.0.1:$A. Em outras palavras, mesma porta, endereço IP local.
Cada argumento leva um número de porta (como acima) ou addr:port para especificar o endereço. (o endereço padrão é 0.0.0.0 para ouvir/ligar e 127.0.0.1 para conectar/enviar para)
Existem outras ferramentas que podem ajudar com este problema, embora tenham propriedades diferentes desta ferramenta.
Soluções que dependem de nc ou socat não preservam os limites do datagrama UDP, o que significa que dois sendmsg UDP podem fazer com que apenas uma única mensagem (combinada) chegue por meio de recvfrom . Muitas aplicações UDP não são resilientes a isso, pois dependem do UDP para fornecer enquadramento de mensagens.
O udp-over-tcp do mullvad fornece apenas encaminhamento unidirecional. É possível executar instâncias adicionais da ferramenta para encaminhar na outra direção, embora isso signifique que a porta de origem dos datagramas de entrada não corresponderá à porta de destino dos datagramas de saída. No entanto, isso provavelmente é adequado para aplicativos estilo cliente-servidor onde a porta do cliente não é importante.
Licenciado sob qualquer um dos
a sua opção.
A menos que você declare explicitamente o contrário, qualquer contribuição enviada intencionalmente para inclusão no trabalho por você, conforme definido na licença Apache-2.0, deverá ser licenciada duplamente conforme acima, sem quaisquer termos ou condições adicionais.