Este é um utilitário de linha de comando e uma biblioteca escrita para testar fluxos de tráfego multicast na rede e testar a resistência da rede e dos dispositivos.
Este utilitário é capaz de interromper totalmente um ambiente L2 que não esteja configurado de forma robusta, portanto, é necessário cautela.
mcast é um utilitário de linha de comando capaz de enviar e receber tráfego multicast ou UDP genérico. Ele também permite a simulação de junções, saídas e consultas IGMP.
NOTA: Atualmente desenvolvido e testado em Mac OSX 10.13.3 com Go versão 1.10. O programa deve funcionar em qualquer Posix/Unix, mas atualmente não funciona totalmente no Windows. Direitos de superusuário podem ser necessários para algumas funcionalidades.
Este repositório é licenciado sob GPLv3. Consulte LICENSE.md para obter detalhes.
Direitos autorais (C) 2018 Will Smith
Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation, seja a versão 3 da Licença ou (a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a Licença Pública Geral GNU para mais detalhes.
Você deverá ter recebido uma cópia da Licença Pública Geral GNU junto com este programa. Caso contrário, consulte http://www.gnu.org/licenses/.
Você deve ter instalado. Se não tiver ou não tiver certeza, visite https://golang.org/doc/install. Você também deve estar executando uma versão OS e Go suportada e testada.
Instale o programa com
go install github.com/individuwill/mcast
Ou, alternativamente, baixe binários pré-construídos das versões v0.1
Execute o receptor em um computador
mcast receive
Execute o remetente em outro computador
mcast send
O roteamento multicast deve estar habilitado entre hosts
mcast é conduzido por subcomandos. Você invoca mcast como:
mcast subcommand [-options...]
A lista de subcomandos é:
Cada subcomando possui um conjunto de opções para controlar seu comportamento. Muitos dos comandos compartilham opções semelhantes e a sintaxe da opção é a mesma quando for esse o caso. Abaixo está uma explicação detalhada de cada subcomando e suas opções associadas.
Exibir ajuda e mensagem de uso para o aplicativo
mcast help [command]
A ajuda para um subcomando específico pode ser mostrada especificando o comando para o qual você deseja ajuda.
Enviará tráfego UDP para o endereço IP especificado. Enviará continuamente em um loop em um intervalo especificado até que o programa seja encerrado ou o número máximo de mensagens seja enviado.
mcast send [-options...]
As opções são:
Escutará o tráfego UDP no endereço IP especificado e imprimirá o conteúdo de texto das mensagens UDP recebidas se a opção estiver habilitada.
mcast receive [-options...]
As opções são:
Ainda não implementado
Ainda não implementado
Ainda não implementado
Alguns testes básicos de código estão atualmente presentes no repositório, mas é necessária uma cobertura muito mais extensa.
Você pode executar manualmente os testes com um dos seguintes comandos:
go test ./..
go test github.com/individuwill/mcast
go test github.com/individuwill/mcast/multicast
Há um arquivo Jenkins na raiz do repositório para execução automática dos testes, compilação cruzada para 3 sistemas operacionais e criação de um artefato zip. Há um git-hook no repositório que executa esse commit e marcará o commit como aprovado ou reprovado.
O plano é testar o código nos 3 sistemas operacionais e testar a interação entre envio e recebimento de multicast no cluster Jenkins.
Também existe um plano para criar automaticamente uma nova versão com binários quando um novo commit marcado para master for feito e passar nos testes.
Atualmente apenas os testes de código são executados. Eles são executados em um ambiente Linux por meio do contêiner oficial do docker golang. Os binários são armazenados no Jenkins e devem ser feitas liberações manuais.
Eu escrevi este programa para testar a funcionalidade multicast em meus projetos de rede, pois descobri que faltavam ferramentas existentes para testar multicast. Eu precisava de um pequeno binário portátil que pudesse copiar para qualquer host para testes rápidos. Isto é especialmente útil para ambientes de laboratório virtual.
Eu também precisava testar e ser capaz de observar o comportamento do tráfego em redes sem fio para entender as opções de configuração do fornecedor que levam à configuração multicast mais robusta para um ambiente sem fio. Até este ponto, com o conjunto correto de opções deste programa, um único host pode causar um DoS em todo um segmento sem fio se a infraestrutura sem fio não estiver configurada corretamente ou se o fornecedor não fornecer a capacidade de configurar ou controlar o comportamento multicast.
Aproveitei a oportunidade para usar este programa para aprender mais sobre multicast e fazer alguma codificação em Golang.
Usei o conjunto https://github.com/troglobit/mtools para testes iniciais do programa durante o desenvolvimento. Esse conjunto de ferramentas também serviu de inspiração para o mcast. Optei por não estender o mtools porque queria simultaneidade fácil, compilação cruzada e binários de plataforma cruzada fáceis.
Aqui estão algumas outras ferramentas que uso ou usei para testar a funcionalidade multicast