Skip to content

Repositório dos trabalhos da disciplina de Redes 2016/2 da UFSCar

Notifications You must be signed in to change notification settings

DouglasBarbino/redes-Douglas-Marcos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Universidade Federal de São Carlos

###Redes de Computadores 2016/2 - Prof. Cesar Marcondes

Repositório de Trabalhos

Alunos: Marcos Vinicius Azevedo da Silva
Douglas Barbino

Projeto 1

No primeiro trabalho, o nosso objetivo era o seguinte (extraído da descrição do trabalho): " A aplicação que será desenvolvida pelo grupo, irá permitir a um usuário realizar uma busca de resultados de comandos de linha, a partir de um conjunto de "máquinas" Linux, através de uma interface web. Especificamente, a aplicação começa apresentando ao usuário uma página web. Nessa página, o usuário poderá selecionar K máquinas de uma lista, e para cada máquina, selecionar um ou mais dos seguintes comandos: ps, df, finger e uptime. Uma vez que essa interface web (em python) receber estas instruções do browser do usuário, um aplicativo backend, também em python, irá se conectar (sequencialmente, ou em paralelo) a um conjunto de "daemons" rodando em cada uma das "máquinas" da lista. O programa backend então passará os comandos que precisam ser executados às respectivas máquinas remotas. Os "daemons" receberão o comando do programa backend e executarão localmente o comando correspondente. Eles então redirecionarão a sáıda desses comandos, e o backend juntará todas as respostas para criar uma página web de resultados." Além disso, para padronizar todos os backends, foi criado um padrão de cabeçalhos parecido com o IPv4.

No código do webserver.py, o primeiro passo foi permitir que fosse criada uma nova página html como resposta e também conseguirmos pegar os dados submetidos da página HTML os estão os comandos, feito tudo isso por meio das funções cgitb.enable() e cgi.FieldStorage().

Após isso, o programa chama a função verifyCheckboxHtml, onde se verifica quais checkboxs da página HTML foram marcados. Ao encontrar uma seleção, é modificado um bit da váriavel command, sendo o bit 1 destinado para o comando ps, o bit 2 destinado para o df, o bit 3 para o finger e o 4º bit é destinado para o uptime.

Passada essa função, é verificado quais checkboxs de determinada máquina foram marcado por meio da variavel commandMaqX (preenchida pelo retorno da função verifyCheckboxHtml), sendo X o número da máquina. Se na máquina avaliada não foi marcado nenhum checkbox é verificado a próxima máquina, caso contrário se inicia a conexão do socket daquela máquina e se busca de qual (ou quais) comandos o checkbox foi marcado, verificando por meio de um comando lógico "and" quais bits estão ativos.

Ao encontrar um comando que deve ser executado, a execução vai para a função send_command, sendo criado o cabeçalho da mensagem e enviando para o daemon, enviando também o comando que deve ser executado. Após receber o cabeçalho vindo do daemon e descompactá-lo, o webserver recebe a resposta da execução, indo depois para a função recv_all aguardar um certo período de tempo para o caso de que sejam enviadas mais mensagens, como em uma situação onde se é extrapolado os 1024 bytes do buffer.

Com o resultado da execução do daemon, é montada a sentença que será impressa na página HTML de resposta, sendo que após percorrer todas as máquinas são fechadas as conexões com os daemons e se imprime na tela a nova página.

No daemon.py, são aguardadas duas mensagens: A primeira contendo o cabeçalho e a segunda contendo o comando que deve ser executado. Após descompactar todo o cabeçalho, já se é montado o novo cabeçalho e o envia, realizando após isso a execução do comando por meio da função subprocess.Popen(command, stdout=subprocess.PIPE, shell=True). O que for retornado é armazenando e enviando para o webserver.

Projeto 2

Objetivo

O objetivo inicial deste trabalho era a realização dos laboratórios Cisco utilizando Mininet. Abaixo se encontra as topologias que deveriam ser construidas e o resultado obtido no Mininet.

Topologia 1

Packet Tracer Map

Mininet Links

Topologia 2

Packet Tracer Map

Mininet Links

Topologia 3

Packet Tracer Map

Mininet Links

Topologia 4

Packet Tracer Map

Mininet Links

Topologia 5

Packet Tracer Map

Mininet Links

Uma alteração do enunciado foi realizado no dia 16/02/2017 para que apenas as Topologias 2 e 3 com seu objetivo (Roteamento Estático e Roteamento Dinâmico) fossem implementados.

O projeto não deu certo, algumas vezes o código compila mas não pinga, em outras nem compila. Um último erro após reescrever grande parte do código foi a permissão de acesso e condição de existência das pastas necessárias para o projeto, que essa foto comprovam sua corretude:

Foi tentando também usar chmod e chown para mudar a permissão dos arquivos mas sem resultados, a imagem a seguir mostra que as permissões estão para a biblioteca.

O arquivo ospf e zebra estão upados no GitHub. Nós do grupo não sabemos o que pode ter dado errado, portanto pelo menos tentamos criar as topologias corretamente que estão no arquivo .py. Outros arquivos de tentativas alternativas não foram upados por não funcionarem ou muitas vezes tentarem criar topologias mais básicas. Gostaria de que se algum grupo conseguiu implementar corretamente que os arquivos fossem compartilhados, já que não temos nenhuma idéia do que pode estar errado.

About

Repositório dos trabalhos da disciplina de Redes 2016/2 da UFSCar

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published