• Nenhum resultado encontrado

Identificando IP s ativos com aplicativo Android

N/A
N/A
Protected

Academic year: 2021

Share "Identificando IP s ativos com aplicativo Android"

Copied!
11
0
0

Texto

(1)

Identificando IP’s ativos com aplicativo Android

Nicolas Melo1, Diógenes Oliveira1, Marcelo Amorim1

1Departamento de Estatística e Informática – Universidade Federal Rural de Pernambuco (UFRPE)

CEP – 52171-900 – Recife – PE – Brasil

{nicolasmelo2,didjosport}@hotmail.com, marcelo_amorim@live.com Abstract. This article aims to describe in details the creation of an application

that uses the ICMP and ping for the Android platform that aims to identify the active IP's in the network. We started discussing and defining the concepts of ICMP, ping and Android. From this, we discussed how is creating applications for the platform of Google. After these intersections, we focus on the steps of the project itself, which tools are used, coding, installation and application.

Resumo. O presente artigo visa relatar com detalhes a criação de um

aplicativo que usa o ICMP e o ping para plataforma Android que objetiva identificar os IP’s ativos na rede. Iniciamos discutindo e definindo os conceitos de ICMP, ping e Android. A partir disso, discutimos como se dá a criação de aplicativos para a plataforma da Google. Após essas intersecções, focaremos nos passos do projeto em si, quais as ferramentas utilizadas, codificação, instalação e aplicação.

1. Introdução

Este artigo foi desenvolvido como proposta de estudo da disciplina de Redes de Computadores ofertada no curso de Bacharelado em Ciência da Computação da Universidade Federal Rural de Pernambuco – UFRPE. A motivação primeira para a construção deste texto foi facilitar a interlocução entre o conhecimento teórico elaborado em sala de aula e a vivência prática do objeto de estudo. Para isso, foi utilizado um aplicativo, desenvolvido para a plataforma Android, que utiliza o ICMP e o PING com a finalidade de observar a conectividade entre dispositivos.

O aplicativo desenvolvido foi nomeado de PingTraffic. A ferramenta possui uma interface simples e possui como funcionalidade realizar PING, retornar os IP’s ativos e detalhar as Características de Rede. Alguns aplicativos semelhantes já se encontram disponíveis ao usuário na loja Google Play. Entre eles temos o NetPING, PingTotal, HostPING etc. O aplicativo desenvolvido neste estudo, possui características similares aos demais citados. No entanto, se espera que a abordagem aqui utilizada venha a contribuir mais nos estudos relacionados.

(2)

será abordado um pouco sobre o sistema operacional Android. Plataforma voltada para dispositivos móveis, na qual o aplicativo foi desenvolvido. Após a exposição dos tópicos mencionados, o leitor terá, a seu alcance, os requisitos necessários para uma melhor compreensão do desenvolvimento metodológico deste estudo. Nesse momento, serão discutidos o processo construtivos ferramentas utilizadas e resultados obtidos. Por fim, as considerações finais serão expostas.

2. ICMP

ICMP (Internet Control Message Protocol) é um dos três principais componentes da camada de rede da Internet e usado para comunicação desta camada entre roteadores e hosts, mais comumente, são comunicadas informações de erro. Por exemplo, numa sessão HTTP, quando recebemos uma mensagem de erro do tipo “Rede de destino inalcançável”, provavelmente o roteador não conseguiu encontrar uma rota para o host e o ICMP gerou a mensagem de erro.

Em geral, existem três causas mais comuns que geram as mensagens ICMP. São elas:

- Um pacote IP não chegou ao seu destino.

- Os pacotes não são transmitidos pelo gateway na frequência adequada. - O roteador encontrou uma melhor rota para enviar os pacotes.

Vale salientar que as mensagens ICMP são geradas dentro de datagramas IP. Ou seja, em termos de arquitetura, ele está logo acima do IP.

Segue abaixo uma tabela com todos os tipos de mensagem ICMP.

Figura 1: KUROSE, J. F.; ROSS, K. W. Redes de Computadores e a Internet: uma nova abordagem.

3. Ping

(3)

É importante lembrar que a maior parte das implementações TCP/IP suporta o servidor ping diretamente do sistema operacional, o que indica que o servidor não é um processo.

O uso do ping para diagnosticar problemas de conexão é sem dúvida, um dos mais usados para tal uso, porém, no início dos anos 2000, muitos provedores de Internet ativaram um filtro para o ICMP tipo 8 para combater ataques de vírus comuns naquela época e com isso, a utilidade do ping foi enfraquecida.

Abaixo, uma imagem de uma requisição ping através do prompt de comando da plataforma Windows:

Figura 2: www.mediacollege.com

4. Android

No início dos anos 2000, a Google tinha pretensões de entrar no mercado de telefonia móvel e em agosto de 2005 comprou uma pequena empresa em Palo Alto, na Califórnia-USA, chamada Android Inc. Um ano depois, várias notícias sobre a compra foram divulgadas por fontes de respaldo mundial, como a BBC e The Wall Street Journal, o que fincou a entrada da Google no mercado de celulares e Smartphones.

Em 5 de novembro de 2007, a Google finalmente anunciou o Android como seu Sistema Operacional oficial no mercado mobile.

Tecnicamente, o Android é uma plataforma baseada em Linux e de código aberto, isto é, qualquer um pode ter acesso ao código fonte, modifica-lo e até mesmo criar seus próprios aplicativos para o SO. Em sua quase totalidade, os aplicativos são desenvolvidos no Eclipse, da linguagem Java, da Oracle. O ambiente de desenvolvimento no Eclipse é o SDK juntamente com o plugin ADT (Android Development Tools).

(4)

A partir da versão 1.5-Cupcake, as atualizações do Android passaram a ter nomes de sobre mesas e bolos em ordem alfabética. As versões seguintes foram 1.6-Donut, 2.0/2.1-Eclair, 2.2-Froyo, 2.3-Gingerbread, 3.0/3.1/3.1-Honeycomb, 4.0-Ice Cream Sandwich, 4.1/4.2/4.3-Jelly Bean.

Desde seu lançamento, o Android tem sido um sucesso nas vendas e adotado por marcas líderes no mercado de telefonia móvel, como a HTC, Samsung, Sony, Motorola, LG e Positivo Informática.

De acordo com a Folha de São Paulo Online de 4 de julho deste ano, juntando celulares, smartphones e tablets com o Sistema Operacional da Google, o Android está perto de alcançar o número de aplicativos baixados da Apple Store. Uma pesquisa pela

Asymco (gráfico abaixo) mostrou que em maio de 2012, cerca de 30 bilhões de

aplicativos foram baixados na Apple Store, 10 bilhões a mais de aplicativos adquiridos no mesmo mês na Google Store. Um ano depois, em maio de 2013, a Google anunciou que teria 48 bilhões de aplicativos baixados e segundo a Asymco, neste mesmo mês, a Apple chegou aos 50 bilhões, o que comprova o crescimento e a evolução do Android no cenário do mercado mundial.

Figura 3: Asymco - 100 billion App downloads, MAY 31 ‘13

5. Metodologia

(5)

 IDE Eclipse:

o A IDE Eclipse é um Ambiente Integrado de Desenvolvimento (Integrated Development Environment) é composto por ferramentas que visam agilizar o desenvolvimento de software.

o As ferramentas que integram a IDE Eclipse são:

 Editor, compilador, depurador, geração de código, testes automatizados, etc.

o O download está disponível em: http://www.eclipse.org/downloads/

 Plugin ADT para o Eclipse:

o O ADT (Android Development Tools) é um plugin para a IDE Eclipse e inclui uma variedade de ferramentas que auxiliam o desenvolvedor em todas as fases do desenvolvimento (criação, execução, depuração e distribuição).

o As instruções para download está disponível em:

http://developer.android.com/sdk/installing/installing-adt.html

 Java JDK:

o Java Development Kit é um kit de desenvolvimento Java distribuído livremente pela Oracle. É constituído de um conjunto de programas que inclui: compilador, interpretador e utilitários que fornecem um aglomerado de ferramentas básicas para o desenvolvimento de aplicações Java.

o O download do Java JDK está disponível em:

http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html

 Android SDK Tools para Windows:

o O Android SDK (Software Development Kit) é um pacote que permite aos programadores elaborarem aplicativos para “rodarem” na plataforma móvel Android.

o O download está disponível em:

http://developer.android.com/sdk/index.html

Após essas ferramentas iniciais terem sido instaladas, é possível iniciar o desenvolvimento pleno do aplicativo que se deseja.

Conforme o desenvolvimento avança, também se faz necessário analisar e modificar os principais arquivos gerados para o projeto em Android, são eles:

(6)

o A activity é uma classe que gerencia a interface com o usuário. Podem ser definidas várias delas e nelas estão contidos os métodos responsáveis por controlar como a interface vai agir ou como ela vai responder aos comandos da tela. Nela também está a função principal que será executada quando a tela é acionada bem como o carregamento do layout.

 R.java

o O plugin ADT cria esse arquivo automaticamente. Contém as constantes necessárias para acessar diversos recursos da aplicação Android, como o layout, por exemplo.

 Main.xml

o Define o layout e os componentes utilizados para a activity. Dentro deste arquivo são determinados os tipos de layout (relativo, linear, etc), que ditam como os elementos ficarão dispostos na interface.

 Manifest.xml

o É visto com o “sistema nervoso” da aplicação. Nesse arquivo ficam as definições referentes à aplicação, às activities, etc. Aqui poderão ser definidos os filtros para novas activities e permissões necessárias para o perfeito funcionamento do aplicativo (permissão para acessar as informações da rede, por exemplo).

Para a criação e desenvolvimento do aplicativo em questão foi conduzido um estudo acerca do ambiente de desenvolvimento para Android no que tange às possibilidades de layout, telas e outras características visuais. Também fez-se necessário aprofundar o aprendizado na linguagem de programação Java e sua capacidade de lidar com funções que estão relacionadas com as características das redes de computadores.

Concomitantemente aos estudos relacionados a semântica intrínseca do Java e do Android, foi imprescindível e trivial conhecer e saber identificar as características de uma rede de computadores, bem como compreender os cálculos realizados para especificar subredes, suas peculiaridades e seus atributos.

(7)

6. O aplicativo

É importante ressaltar que para o perfeito funcionamento do aplicativo é necessário que o aparelho seja “root” (modificação que permite ao usuário/aplicativo obter mais poderes e privilégios sobre o sistema). Para saber como realizar este procedimento acesse este link: http://www.superdownloads.com.br/materias/root-que-que-serve.html. 6.1. Funcionamento

O aplicativo consiste, primordialmente, em coletar e analisar os dados obtidos da rede para, através do comando Ping, verificar quais IP’s estão ativos na rede em questão. Essa verificação ocorre dentro de um laço de repetição que captura o IP inicial da rede e incrementa em uma unidade até alcançar o último IP possível da rede. A cada iteração é realizado o Ping e sua resposta é avaliada e tratada para, a partir da mesma, indicar se o IP considerado está ativo em algum dispositivo.

6.2. Código

Aqui, mostraremos algumas das funções que foram utilizadas durante o desenvolvimento de todo o aplicativo. Ressaltando que são apenas amostras do código e que não refletem a totalidade do software, apenas servem de demonstração do que foi utilizado:

6.2.1. Verificar se o dispositivo está conectado:

ConnectivityManager conectivtyManager = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);

6.2.2. Executar e guardar o resultado do comando ping: String pingCmd = "ping -c 4 " + host;

String pingResult = "";

Runtime r = Runtime.getRuntime(); Process p = r.exec(pingCmd);

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String inputLine;

while ((inputLine = in.readLine()) != null) {

pingResult += (inputLine + "\n"); }

6.2.3. Retorna informações como IP e máscara: String ipmask = "ifconfig eth0";

String ipmaskResult = "";

(8)

6.2.4. Retorna o IP do servidor DNS: String dns = "getprop net.dns1";

String dnsResult = "";

Runtime r2 = Runtime.getRuntime(); Process p2 = r2.exec(dns);

6.2.5. Informações sobre o status da conexão wifi:

WifiManager wifiMan = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInf = wifiMan.getConnectionInfo();

String macAddr = wifiInf.getMacAddress(); 6.2.6. Nome do host:

InetAddress inetAddr = InetAddress.getByName(ip); String hostname = inetAddr.getHostName();

String canonicalHostname = inetAddr.getCanonicalHostName();

6.2.7. AND binário entre o IP (strB) e a máscara (strB2): String andSN = "";

int contador = 0;

for (contador=0; contador < strB2.length(); contador++){

char c = strB2.charAt(contador); char c2 = strB.charAt(contador); if (c==c2){ andSN = andSN + c; } else { andSN = andSN + "0"; } } 6.2.8. Gateway da rede: String iproute = "iproute"; String iprouteResult = "";

Runtime r3 = Runtime.getRuntime(); Process p3 = r3.exec(iproute);

6.2.9. Incrementa 1 (um) ao endereço IP dado: 1. Recebe um endereço IP binário

2. Divide a string binária (impossibilidade de calcular os 32 bits do IP) 3. Converte cada parte para inteiro / BigInteger

4. Adiciona 1

(9)

public static String somarUm (String host2){

String rangeIni = host2.replaceAll("[.]", "");

String rangeIni1 = rangeIni.substring(0, 16); int rangeIni11 = Integer.parseInt(rangeIni1, 2); String rangeIni111 = Integer.toString(rangeIni11);

String rangeIni12 = rangeIni.substring(16, rangeIni.length()); int rangeIni122 = Integer.parseInt(rangeIni12, 2);

String rangeIni1222 = Integer.toString(rangeIni122);

String a9 = Integer.toString((int)Math.pow(2, 16)); BigInteger aa9 = new BigInteger (a9);

BigInteger rangeIni9 = new BigInteger (rangeIni111); BigInteger rangeIni92 = new BigInteger (rangeIni1222); BigInteger um = new BigInteger ("1");

BigInteger resultIni = aa9.multiply(rangeIni9).add(rangeIni92).add(um); String resultInii = resultIni.toString(2);

int numBit = 32;

StringBuffer resultIni7 = new StringBuffer(resultInii); for (int u = resultIni7.length(); u<numBit; u++){ resultIni7.insert(0, "0");

}

int aa = 8; int ii = 0;

StringBuilder strBB = new StringBuilder(resultIni7);

while (ii<3){

strBB.insert(resultIni7.length() - aa, '.'); aa += 8;

ii += 1; }

String[] octetos3 = strBB.toString().split("[.]");

int qq, ww; String fhIP = ""; for (qq=0; qq<octetos3.length; qq++){ ww = Integer.valueOf(octetos3[qq], 2); fhIP = fhIP + ww; fhIP = fhIP + "."; }

String fhIPfinal = fhIP.substring(0, fhIP.length() -1);

return fhIPfinal;

(10)

7. Resultados e discussão

Como resultado deste projeto, obtivemos um aplicativo útil para quem deseja saber um pouco mais das características da rede a qual está acessando com seu dispositivo móvel. Como esperado, o desenvolvimento deste software nos possibilitou adquirir um embasamento técnico razoavelmente sólido para podermos, a partir de agora, dar prosseguimento às melhorias que podem ser realizadas no mesmo.

Ressaltamos aqui, também, que o resultado final foi bastante satisfatório e atendeu completamente às expectativas e anseios dos desenvolvedores.

Abaixo, algumas imagens do aplicativo em funcionamento:

Figura 4: aplicativo em funcionamento

(11)

8. Conclusão

Neste artigo, conseguimos entender melhor algumas questões relevantes na disciplina de Redes de Computadores, tais como protocolos e camadas. Com uma base mais fortalecida sobre esses conhecimentos e suas funcionalidades, podemos partir para o desenvolvimento móvel (no caso, a plataforma Android), o qual se mostrou um mundo cheio de alternativas e em pleno vapor no mercado.

Concluímos que nosso projeto contribuiu para ampliar ainda mais as possibilidades dos softwares desenvolvidos para plataformas móveis como um todo, já que diferentemente dos aplicativos que usam o ping para simples teste de conectividade, o nosso faz uso deste para descobrir números de IP’s ativos numa determinada rede.

Por fim, chegamos à conclusão de que este projeto pode ser usado, como uso futuro, em práticas nas próprias aulas na disciplina de redes, tendo em vista o grande número de tópicos e assuntos que são vistos teoricamente.

9. Referências bibliográficas

“How to icmp ping on Android”, http://stackoverflow.com/questions/7451200/how-to-icmp-ping-on-android, setembro 2013.

ICMP, http://pt.wikipedia.org/wiki/Internet_Control_Message_Protocol, setembro 2013. KUROSE, J. F.; ROSS, K. W. Redes de Computadores e a Internet: uma nova abordagem. Tradução de Arlete Simille Marques. São Paulo: Addison Wesley, 2003. cap. 6, p. 377-440.

Ping, http://www.wafl.co.uk/tag/ping/, setembro 2013. Ping, http://pt.wikipedia.org/wiki/Ping, setembro 2013. “Ping or nmap to identify machines”,

http://linuxcommando.blogspot.com.br/2008/05/ping-or-nmap-to-identify-machines-on.html, setembro 2013.

Referências

Documentos relacionados

No entanto, maiores lucros com publicidade e um crescimento no uso da plataforma em smartphones e tablets não serão suficientes para o mercado se a maior rede social do mundo

Maria Silene Vieira Wanderley  Maria Silene Vieira Wanderley 18/01/2017 17:27

Taking into account the theoretical framework we have presented as relevant for understanding the organization, expression and social impact of these civic movements, grounded on

Realizar a manipulação, o armazenamento e o processamento dessa massa enorme de dados utilizando os bancos de dados relacionais se mostrou ineficiente, pois o

Com o fomento de políticas voltadas o contexto da Língua de Sinais nos cursos de Ensino Superior tem como fator de observação a prática docente e o uso de

Os estudos originais encontrados entre janeiro de 2007 e dezembro de 2017 foram selecionados de acordo com os seguintes critérios de inclusão: obtenção de valores de

Aos 7, 14 e 21 dias após a emergência (DAE), foi determinado o índice SPAD no folíolo terminal da quarta folha completamente expandida devido ser esta folha recomendada para verificar

Diante da relevância do tema, o objetivo deste estudo foi verificar a prevalência de incapacidade funcional em idosos de Juiz de Fora, município do estado de Minas