GithubHelp home page GithubHelp logo

roteador-e-cliente's Introduction

Roteador, Cliente

Serão explicadas brevemente as funções de cada classe.

Roteador → Recebe uma entrada no formato “ numero_porta rede-destino/máscara/gateway/interface “ que definirá seu funcionamento. Após criado, ele ficará escutando na porta definida na entrada até receber um pacote.

Caso venha a receber um pacote, ele lerá o campo de mensagem do pacote, o qual carrega o IP destino (da rede que se quer chegar), o IP do roteador ( para o qual a mensagem está sendo enviada), o IP origem (de quem criou o pacote) e a mensagem em si.

Após lê-lo, ele verificará na sua tabela de roteamento o que fazer com o pacote (se descarta-o, se encaminha-o diretamente ou repassa para um próximo roteador, alterando e recriando corretamente a parte de mensagem do pacote).

Endereco → Possui um vetor de 4bytes que armazena um endereço na forma de bytes e uma String que armazena o endereço na forma de String. Esta classe realiza operações binárias de comparação, como a lógica de criar e armazenar a versão binária de um endereço na forma String.

Mascara → Além de fazer tudo que a classe Endereco faz (por extendê-la), guarda o tamanho da máscara (se é /24, /28, /20 etc) e implementa lógicas adicionais de criar o vetor de 4 bytes que guarda o valor da máscara (por ex, 255.255.255.255 na forma binária).

Um método que vale destacar é o “adicionarTamanhoMascara”. Este método recebe os bytes que vão sendo criados e adicionados ao vetor de 4 bytes e, por meio de um switch, vai incrementando a variável que guarda o tamanho da máscara.

Tal método foi criado para facilitar as comparações na tabela de roteamento, caso mais de duas linhas fossem compatíveis como endereço destino (a linha que “casar” com o IP destino do pacote e que tiver a máscara com o maior tamanho é para onde deve ser encaminhado o pacote).

LinhaTabela → Possui um Endereco que é o IP do roteador destino, uma Mascara, um Endereco que é para onde deve ser encaminhado o pacote, caso ele case com a operação de “E Binário” e um inteiro que diz a porta para onde deve ser encaminhado.

TabelaRoteamento → Possui diversas LinhaTabela’s. Cada LinhaTabela é um “rede-destino/máscara/gateway/interface” que foi passado como parâmetro quando o Roteador foi criado.

Responsável por pegar os parâmetros passados pelo Roteador e criar a LinhaRoteamento. Seu método “verificarIP” recebe como parâmetro o IPdestino do pacote e realiza comparações para verificar se há “casamento” com uma de suas linhas. Caso haja casamento de uma ou mais linhas, chama-se o método “escolherRoteador” que recebe um ArrayList de possíveis endereços, ou seja, possíveis linhas da tabelas para onde pode ser encaminhado o pacote. Aqui é utilizado o método “adicionarTamanhoMascara” da classe Mascara.

ProximoRoteador → Classe auxiliar que é utilizada apenas para guardar o IP e a porta do roteador para o qual encaminhar o pacote.

Mensagem → Possui métodos que recebem parâmetros informações do pacote, como IP destino, e formata e exibe as mensagens solicitadas no trabalho.

Emissor → Recebe uma entrada no formato IP_RoteadorDestino/ Porta_RoteadorDestino/IP_Origem/IP_Destino/Mensagem, cria o pacote com o campo de mensagem contendo o IP_Destino, IP_RoteadorDestino, IP_Origem e a mensagem, e a envia para o Roteador que está no IP_RoteadorDestino escutando na porta Porta_RoteadorDestino.

Funcionalidades não implementadas

  • Enviar pacotes por interfaces que não são numéricas (como eth0 e eth1).

  • Ler entradas por parâmetros de argumento (primeiro executa-se o arquivo.class e depois informa-se os parâmetros para a execução).

  • Ler parâmetros separados por mais de um espaço “ ” (caso execute, por exemplo, “1111 10.0.0.0/255.0.0.0/0.0.0.0/0

150.1.0.0/255.255.0.0/0.0.0.0/0

30.1.2.0/255.255.255.0/127.0.0.1/2222

0.0.0.0/0.0.0.0/127.0.0.1/2222”, o programa executará incorretamente a lógica implementada e lançará uma exceção, pois entre “1111” e “10.0.0.0” existem dois espaços).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.