sexta-feira, 8 de dezembro de 2017

Projeto de Scan de Rede com Arduino Uno R3

Com o intuito de fazer um projeto com Arduino, voltado para segurança da informação, após algumas ideias descartadas, veio esta do scan de rede.

Já existem aplicativos de celular como o Fing, assim como diversos programas e/ou comandos que podem ser executados a partir de um PC, por exemplo, porém estes precisam da interação humana para realizar um escaneamento, . E se um dia o usuário se esquecer de escanear a rede e exatamente neste dia houve alguma alteração/invasão, como saber?

E se com um dispositivo que faz o escaneamento automaticamente, com um intervalo de tempo determinado pelo próprio usuário, com gasto de energia elétrica extremamente baixo, bastando apenas plugar este dispositivo no cabo de rede, e na fonte.E ainda tornar um projeto de hardware livre.

A partir disso surgiu a idéia do scan de rede com o Arduino.
O projeto para a matéria de Arquitetura e Organização de Computadores, do Professor Ismael Moura Parede, é em dupla, neste caso estou fazendo com o Pedro. Este post é uma adaptação do trabalho entregue.

MATERIAL 
Arduino Uno R3 CH350G da RoboDyn
Shield Ethernet

Cabos de rede
Cabo USB / mini USB (para alimentação/inserção de dados)
Switch  de 8 portas , Encore ENH908-NWY

Aqui tem um tutorial em português, bem detalhado sobre o Arduino Uno, mas alguns aspectos desse modelo da RoboDyn são diferentes, como a porta USB aqui usada, que é a mini, ao contrário dos modelos antigos, que usavam o tipo B.

Tutorial básico (em inglês) do shield Ethernet.

Para usar o cartão micro SD do shield Ethernet, é necessário usar a biblioteca do mesmo.
Neste cartão pretendemos gravar as informações adquiridas a cada escaneamento da rede, e assim poder compara-las e alertar sobre qualquer alteração.

Para colocar o Shield Ethernet, basta alinha-lo com o Arduino Uno R3, sendo que a entrada do cabo de rede (RJ45), deve ficar logo acima da entrada USB, como visto na animação.


DIAGRAMAS / ESQUEMAS

Para simular um ambiente de rede residencial cabeada, evitando assim o uso da rede da faculdade, utilizamos um switch de 8 portas, e a partir dele, um cabo de rede vai para o shield arduino, e um cabo de rede para cada dispositivo.
Lembrando que todos os dispositivos conectados tem de estar na mesma classe de IP (Internet Protocol), que no caso foi usada a 192.168.1.0. 
O netbook usado para os testes e de onde usamos o monitor serial, por exemplo, ficou com o IP 192.168.1.5. Este netbook usa o Debian como sistema operacional.


Conectamos outro notebook, este com Windows 10, mas lembre-se de desativar o Firewall nativo, que vem habilitado por padrão, este foi configurado para ficar com IP 192.168.1.9.

Abaixo um diagrama de nosso ambiente de testes 


PROGRAMA


No programa, tudo que esta grifado em azul após as barras duplas, são os comentários explicando o funcionamento dos trechos.  

Sempre que usar um shield é recomendável adicionar sua biblioteca, para o funcionamento correto do mesmo, e assim conseguir explorar sua usabilidade ao máximo.
No nosso caso as bibliotecas usadas são:

Biblioteca para comunicação de periféricos em série (Serial Peripheral Interface), já vem por padrão na IDE do Arduino (pequeno tutorial em pt-br)

Biblioteca do shield Ethernet, também disponivel por padrão na IDE do Arduino

Biblioteca para executar a função do comando “ping” , esta biblioteca, ao contrário das anteriores, não esta disponível por padrão na IDE do Arduino. Esta é uma das diversas bibliotecas feitas pela comunidade de usuários do Arduino

O programa pode ser encontrado no GitHub do Pedro.


COMENTÁRIOS E CONCLUSÕES

Para visualizar o funcionamento passo a passo do programa, utilizamos o monitor serial, que pode ser acessado pela IDE do Arduino. Através do monitor serial também é possível acompanhar o comando “ping” e sua resposta (se offline, ou dispositivo conectado).


Depois de efetuada a varredura dos IPs da classe de rede , já pré definida, o programa mostra quantos dispositivos estão conectados na rede. Após uma segunda varredura, o programa compara com o resultado da operação anterior e avisa se encontrou mais dispositivos ou se não houve alteração na rede.


Muito obrigado se você chegou a ver até aqui. Aceitamos sugestões, e queremos manter este projeto em aberto para toda a comunidade.

Bônus: Vídeo da apresentação, gravado pelo Will.





Uma versão atualizada esta no GitHub do ABC Makerspace