FACULDADE DE TECNOLOGIA SENAC GOIÁS
Segurança da Informação – SI-I
JONAS PIRES DE CAMPOS NETO
RANGEL RODRIGUES XAVIER DE ASSIS
RAPHAEL PEREIRA MODANEZ
PROJETO
INTEGRADOR
LUCÍLIA GOMES RIBEIRO
KELLY ALVES MARTINS DE LIMA
DINAILTON JOSÉ DA SILVA
RAFAEL LEAL MARTINS
FABRICIO LEONARD
GOIÂNIA,
2016
2
JONAS PIRES DE CAMPOS NETO
RANGEL RODRIGUES XAVIER DE ASSIS
RAPHAEL PEREIRA MODANEZ
PROJETO INTEGRADOR
Relatório apresentado como requisito parcial para
obtenção de aprovação nas disciplinas de
Infraestrutura de Redes de Computadores,
Laboratório
de
Computação,
Lógica
de
Programação e Algoritmos, Princípios de
Segurança
da
Informação
e
Redes
de
Computadores, no Curso de Segurança da
Informação, na Faculdade de Tecnologia SENAC
Goiás.
LUCÍLIA GOMES RIBEIRO
KELLY ALVES MARTINS DE LIMA
DINAILTON JOSÉ DA SILVA
RAFAEL LEAL MARTINS
FABRICIO LEONARD
GOIÂNIA,
2016
3
RESUMO
Este projeto está focado na construção de um relatório acadêmico, com artefatos
gerados a partir de uma auditoria de segurança realizada na fase de exploração do Pentest. O
desenvolvimento das atividades parte do estudo de ferramentas para coleta de informações da
rede (faixa de ips, serviços e portas abertas, endereços ethernet), e elaboração do um
programa em C para ler este arquivo e carregar as informações em variáveis compostas
(vector) e implementar a lógica para calcular:
Total de hosts ativos;
Quantidade de portas abertas;
Frequência de cada porta aberta;
Tipo de serviços disponíveis (de acordo com as portas abertas);
Relatório com a identificação dos endereços ethernet das estações de trabalho e
servidores;
4
SUMÁRIO
1 RESUMO ... 3
2 INTRODUÇÃO ... 5
2 OBJETIVO ... 5
3 DESENVOLVIMENTO ... 5
4 RESULTADOS ... 6
5 BIBLIOGRAFIA ... 7
APÊNDICE A – Relatório Nmap ... 8
APÊNDICE A – Algoritmo ... 11
5
1. INTRODUÇÃO
O Projeto Integrador é uma estratégia de ensino–aprendizagem cujo objetivo é
proporcionar a interdisciplinaridade entre todos os temas/assuntos/bases abordados durante o
curso de Segurança da Informação. O processo de realização do Projeto Integrador fornece
subsídios para a avaliação das competências relacionadas ao perfil profissional de Segurança
da Informação, e seu objetivo maior é “articular teoria e prática” mediante o contato do aluno
com diversos contextos do mundo do trabalho.
2. OBJETIVO
Aplicação de todos os conhecimentos e técnicas aprendidos durante o 1º período no
curso de Segurança da Informação, visando o mapeamento de uma rede através do programa
Nmap, geração do relatório em arquivo .txt, elaboração de um programa em C para análise do
arquivo e implementação de uma lógica visando mostrar resultados específicos, tais como:
números e frequência de portas abertas, quantidade de hosts ativos, total de endereços
Ethernet por fabricante e hosts, e por último, descrever o que pode ser feito por um
profissional de segurança da informação a partir dos relatórios gerados, tendo em base as
possíveis vulnerabilidades encontradas.
3. DESENVOLVIMENTO
O primeiro passo para a elaboração do projeto foi o de gerar o arquivo de log da rede,
através do programa Nmap, em sua interface gráfica do Windows, usamos o Zenmap,
relatório este gerado à partir de nossos conhecimentos adquiridos na disciplina de Redes,
professor Dinailton José da Silva. O comando utilizado para que este relatório fosse gerado
foi: #nmap –sS 192.168.1.0/24 > nmap.txt, sendo a opção –sS (scan TCP SYN) a opção de
scan padrão e mais popular por boas razões. Pode ser executada rapidamente, escaneando
milhares de portas por segundo em uma rede rápida, não bloqueada por firewalls intrusivos. O
scan SYN é relativamente não-obstrusivo e camuflado, uma vez que ele nunca completa uma
conexão TCP. Ele também trabalha contra qualquer pilha TCP padronizada ao invés de
depender de idiossincrasias de plataformas específicas como os scans Fin/Null/Xmas,
Maimon e Idle fazem. Ele também permite uma diferenciação limpa e confiável entre os
estados aberto (open), fechado (closed), e filtrado (filtered).
6
Com o relatório em mãos, foi elaborado um algoritmo, sob supervisão da professora
de Lógica de Programação e Algoritmo, Lucília Gomes Ribeiro, e implementado em
linguagem C, sob orientação do professor Fabrício Leonard, de Laboratório de Programação,
que tem por finalidade: 1. Abrir o arquivo em colocar em um vetor uma linha do arquivo do
Nmap, percorrendo todo o código com esta linha, colocando os dados como Ips, Mac
Address, Portas e Serviços, em vetores, e implementando a lógica com os laços de repetição
“for”, “while”, estruturas condicionais “if” e “else”, finalizando o primeiro laço “while”,
retorna ao mesmo com a segunda linha do arquivo capturado, assim, sucessivamente até
encontre o final do arquivo. E, ao final do programa, nos é apresentando em modelo de
formulário os resultados esperados e já citados anteriormente.
E por último, sob a orientação da professora de Laboratório de Computação, Kelly
Alves Martins de Lima, elaboramos um site que tem por finalidade a exposição dos trabalhos
realizados durante o Projeto Integrador SI-1, em HTML5 e CSS, ficando o mesmo já
preparado para receber os trabalhos dos Projetos Integradores vindouros.
4. RESULTADOS
Em posse do relatório gerado pelo programa, analisamos as portas abertas e seus
serviços, e vemos quais não correspondem aos serviços essenciais e que estão abertas, para, a
partir daí, analisarmos as demais portas abertas e da necessidade de mantê-las neste estado,
visando assim diminuir a possibilidade de invasão de hackers, e da existência de trojans e
demais malwares no sistema que podem estar abrindo as portas.
Assim, a adoção de uma boa política de segurança da informação, principalmente num
ambiente corporativo, faz-se ainda mais necessário, e a instalação de softwares anti-vírus,
mantendo-os sempre atualizados, bem como os demais softwares e implementação de um
firewall.
7
5.
REFERÊNCIAS BIBLIOGRÁFICAS
Técnicas de escaneamento de portas, 2016. Disponível em:
https://nmap.org/man/pt_BR/man-port-scanning-techniques.html/
. Acesso em: 09 de dez. 2016.
C library, 2016. Disponível em:
http://www.cplusplus.com/reference/clibrary/
. Acesso em 09
de dez. 2016.
BOSWELL, Dustin. A Arte de Escrever Programas Legíveis: técnicas simples e práticas para
a elaboração de programas fáceis de serem lidos e entendidos. 1. ed. São Paulo: Novatec,
2012.
Apendice A
1
2 Starting Nmap 7.00 ( https://nmap.org ) at 2016-12-08 20:22 Horário brasileiro de verão
3 Nmap scan report for 192.168.1.1
4 Host is up (0.00s latency).
5 Not shown: 1996 closed ports
6 PORT STATE SERVICE
7 23/tcp open telnet
8 80/tcp open http
9 161/udp open snmp
10 514/udp open|filtered syslog
11 MAC Address: F8:B1:56:73:E4:3D (Dell)
12
13 Nmap scan report for 192.168.1.2
14 Host is up (0.00062s latency).
15 Not shown: 998 filtered ports, 998 open|filtered ports
16 PORT STATE SERVICE
17 902/tcp open iss-realsecure
18 912/tcp open apex-mesh
19 68/udp closed dhcpc
20 137/udp open netbios-ns
21 MAC Address: 50:E5:49:FA:F0:9A (Giga-byte Technology)
22
23 Nmap scan report for 192.168.1.107
24 Host is up (0.00082s latency).
25 Not shown: 998 closed ports
26 PORT STATE SERVICE
27 22/tcp open ssh
28 80/tcp open http
29 MAC Address: 08:00:27:55:DD:68 (Oracle VirtualBox virtual NIC)
30
31 Nmap scan report for 192.168.1.108
32 Host is up (0.00033s latency).
33 Not shown: 998 filtered ports, 998 open|filtered ports
34 PORT STATE SERVICE
35 902/tcp open iss-realsecure
36 912/tcp open apex-mesh
37 68/udp closed dhcpc
38 137/udp open netbios-ns
39 MAC Address: 50:E5:49:F6:33:5F (Giga-byte Technology)
40
41 Nmap scan report for 192.168.1.119
42 Host is up (0.00s latency).
43 Not shown: 1996 closed ports
44 PORT STATE SERVICE
45 23/tcp open telnet
46 80/tcp open http
47 67/udp open|filtered dhcps
48 68/udp open|filtered dhcpc
49 MAC Address: 00:23:5D:5C:4C:40 (Cisco Systems)
50
51 Nmap scan report for 192.168.1.120
52 Host is up (0.00013s latency).
53 Not shown: 1996 closed ports
54 PORT STATE SERVICE
55 68/udp open|filtered dhcpc
56 623/udp open|filtered asf-rmcp
57 631/udp open|filtered ipp
58 5353/udp open zeroconf
59 MAC Address: 50:E5:49:F7:07:BA (Giga-byte Technology)
60
61 Nmap scan report for 192.168.1.128
62 Host is up (0.00038s latency).
63 Not shown: 998 filtered ports, 998 open|filtered ports
64 PORT STATE SERVICE
65 902/tcp open iss-realsecure
66 912/tcp open apex-mesh
67 68/udp closed dhcpc
68 137/udp open netbios-ns
69 MAC Address: 50:E5:49:F4:B0:00 (Giga-byte Technology)
70
71 Nmap scan report for 192.168.1.136
72 Host is up (0.00017s latency).
73 Not shown: 998 filtered ports, 998 open|filtered ports
74 PORT STATE SERVICE
75 902/tcp open iss-realsecure
76 912/tcp open apex-mesh
77 68/udp closed dhcpc
78 137/udp open netbios-ns
Apendice A
80
81 Nmap scan report for 192.168.1.138
82 Host is up (0.00011s latency).
83 Not shown: 1996 closed ports
84 PORT STATE SERVICE
85 68/udp open|filtered dhcpc
86 69/udp open|filtered tftp
87 623/udp open|filtered asf-rmcp
88 5353/udp open zeroconf
89 MAC Address: 08:00:27:B3:9D:2A (Oracle VirtualBox virtual NIC)
90
91 Nmap scan report for 192.168.1.149
92 Host is up (0.00020s latency).
93 Not shown: 998 filtered ports, 998 open|filtered ports
94 PORT STATE SERVICE
95 902/tcp open iss-realsecure
96 912/tcp open apex-mesh
97 68/udp closed dhcpc
98 137/udp open netbios-ns
99 MAC Address: 50:E5:49:F8:3B:2E (Giga-byte Technology)
100
101 Nmap scan report for 192.168.1.153
102 Host is up (0.00s latency).
103 Not shown: 1999 closed ports
104 PORT STATE SERVICE
105 623/udp open|filtered asf-rmcp
106 MAC Address: 50:E5:49:F7:0A:93 (Giga-byte Technology)
107
108 Nmap scan report for 192.168.1.160
109 Host is up (0.00013s latency).
110 Not shown: 998 filtered ports, 998 open|filtered ports
111 PORT STATE SERVICE
112 902/tcp open iss-realsecure
113 912/tcp open apex-mesh
114 68/udp closed dhcpc
115 137/udp open netbios-ns
116 MAC Address: 50:E5:49:FA:F0:33 (Giga-byte Technology)
117
118 Nmap scan report for 192.168.1.171
119 Host is up (0.000042s latency).
120 Not shown: 1997 filtered ports
121 PORT STATE SERVICE
122 22/tcp open ssh
123 80/tcp open http
124 623/udp open|filtered asf-rmcp
125 MAC Address: 08:00:27:25:6B:FD (Oracle VirtualBox virtual NIC)
126
127 Nmap scan report for 192.168.1.174
128 Host is up (0.00018s latency).
129 Not shown: 998 open|filtered ports, 995 filtered ports
130 PORT STATE SERVICE
131 135/tcp open msrpc 132 139/tcp open netbios-ssn 133 445/tcp open microsoft-ds 134 902/tcp open iss-realsecure 135 912/tcp open apex-mesh 136 68/udp closed dhcpc
137 137/udp open netbios-ns
138 MAC Address: 50:E5:49:FA:F0:D9 (Giga-byte Technology)
139
140 Nmap scan report for 192.168.1.179
141 Host is up (0.0012s latency).
142 Not shown: 998 filtered ports, 998 open|filtered ports
143 PORT STATE SERVICE
144 902/tcp open iss-realsecure
145 912/tcp open apex-mesh
146 68/udp closed dhcpc
147 137/udp open netbios-ns
148 MAC Address: 50:E5:49:F7:0B:56 (Giga-byte Technology)
149
150 Nmap scan report for 192.168.1.180
151 Host is up (0.00s latency).
152 Not shown: 1981 closed ports
153 PORT STATE SERVICE
154 135/tcp open msrpc
155 139/tcp open netbios-ssn
156 445/tcp open microsoft-ds
157 902/tcp open iss-realsecure
Apendice A 159 5432/tcp open postgresql 160 49152/tcp open unknown 161 49153/tcp open unknown 162 49154/tcp open unknown 163 49155/tcp open unknown 164 49159/tcp open unknown 165 49160/tcp open unknown
166 137/udp open netbios-ns
167 138/udp open|filtered netbios-dgm
168 500/udp open|filtered isakmp
169 623/udp open|filtered asf-rmcp
170 1900/udp open|filtered upnp
171 4500/udp open|filtered nat-t-ike
172 5355/udp open|filtered llmnr
173 MAC Address: 50:E5:49:F7:07:83 (Giga-byte Technology)
174
175 Nmap scan report for 192.168.1.186
176 Host is up (0.00013s latency).
177 Not shown: 1992 closed ports
178 PORT STATE SERVICE
179 22/tcp open ssh
180 53/tcp open domain
181 111/tcp open rpcbind
182 53/udp open domain
183 111/udp open rpcbind
184 623/udp open|filtered asf-rmcp
185 631/udp open|filtered ipp
186 775/udp open|filtered acmaint_transd
187 MAC Address: 50:E5:49:FA:F1:DD (Giga-byte Technology)
188
189 Nmap scan report for 192.168.1.196
190 Host is up (0.00020s latency).
191 Not shown: 998 filtered ports, 998 open|filtered ports
192 PORT STATE SERVICE
193 902/tcp open iss-realsecure
194 912/tcp open apex-mesh
195 68/udp closed dhcpc
196 137/udp open netbios-ns
197 MAC Address: 50:E5:49:FA:EF:B7 (Giga-byte Technology)
198
199 Nmap scan report for 192.168.1.200
200 Host is up (0.00024s latency).
201 Not shown: 998 filtered ports, 998 open|filtered ports
202 PORT STATE SERVICE
203 902/tcp open iss-realsecure
204 912/tcp open apex-mesh
205 68/udp closed dhcpc
206 137/udp open netbios-ns
207
208 Nmap done: 255 IP addresses (19 hosts up) scanned in 1105.65 seconds
Apendice B
1 /*Alunos: Jonas Pires de Campos Neto 2 Rangel Rodigues Xavier de Assis
3 Raphael Pereira Modanez
4
5 Descrição: Algoritmo para elaboração de um programa para leitura de um arquivo gerado a partir 6 de um scaneamento da rede atravez do programa Nmap (utilizado o Zenmap, plataforma 7 para windows do Nmap), e através deste programa informar: 1. A frequência de cada 8 porta aberta; 2. Descrição dos serviços disponíveis de acordo com a porta aberta; 9 3. Descrição dos endereços Ethernet; 4. Total de Endereços Ethernet por fabricante.*/ 10
11 Algoritmo ProjetoIntegrador{ 12 //Declaração de Variáveis
13 caracter line[1000], ip[1000][20], nulo1[50], nulo2[50], nulo3[50], nulo4[50]; 14 caracter numeroPorta[1000][15], numPortas[1000][15], servicoPorta[1000][20]; 15 caracter macadress[100][512], nmac[100][512], nomeFabr[100][512];
16 caracter numPortasAux[1000][15], macForn[1000][15], macFornAux[1000][15];
17 inteiro hosts = 0, macs = 0, i, j, portasAbertas = 0, contadorPortas[1000], contadorMacs[1000]; 18 real porcPorta[1000];
19 //Abertura do Arquivo gerado pelo Nmap 20 ARQUIVO *file;
21 file= abrirArquivo("nmap.txt", "r"); 22 //Validação do arquivo aberto 23 se(file == NULL){
24 escreva("Nao foi possivel abrir o arquivo."); 25 }senão{
26 //processamento de dados
27 enquanto((linhaCapturada(line, 1000, file)) != NULL){ 28 //Inicia a Variável para contagem de portas abertas 29 contadorPortas[portasAbertas] = 0;
30 //verifica na linha a existência das palavras entre "" 31 se((line == "/udp") e (line == "/tcp") ou (line == "open")){ 32 //adiciona ao vetor o numero da porta e o servico da mesma 33 leia(line, " ", numPortas[portasAbertas]," ", nulo1, "
",servicoPorta[portasAbertas]); 34 para(i = 0; line[i] != '/'; i++){
35 numeroPorta[portasAbertas][i] = numPortas[portasAbertas][i];
36 }
37 numPortasAux[portasAbertas] = numeroPorta[portasAbertas]; 38 //associa o servico a porta
39 para(i = 0; i <= portasAbertas; i++){ 40 para(j = 0; j <= portasAbertas; j++){ 41 se(numeroPorta[i] == numPortasAux[j]){ 42 numPortasAux[j] = " "; 43 contadorPortas[i]++; 44 } 45 } 46 } 47 }
48 //copia o numero de ip para o vetor e adiciona 1 a variavel contadora hosts 49 se(line == "Nmap scan report"){
50 leia(line," ", nulo1, " ", nulo2, " ", nulo3, " ", nulo4, " ",
ip[hosts]);
51 hosts++;
52 }
53 //copia o numero do mac para o vetor e adicona 1 a variavel contadora macs 54 se(line == "MAC Address:"){
55 leia(line," ", nulo1," ", nulo2, " ", nmac[macs]); 56 para(i = 32; line[i] != ')'; i++){
57 nomeFabr[macs][i - 32] = line[i];
58 }
59 para(i = 0; i < 9; i++){
60 macForn[macs][i] = nmac[macs][i];
61 }
62 contadorMacs[macs] = 0;
63 macFornAux[macs] = macForn[macs]; 64 para(i = 0; i <= macs; i++){ 65 para(j = 0; j <= macs; j++){ 66 se(macForn[i] == macFornAux[j]){ 67 macFornAux[j] = " "; 68 contadorMacs[i]++; 69 } 70 } 71 } 72 macs++;
73 //adiciona 1 na variavel contadora portasAbertas
74 }
75 se (line == "open") {
76 portasAbertas++;
Apendice B
78 se (line == "open|filtered ports"){
79 portasAbertas--;
80 }
81 }
82 }
83 //Fechamento do arquivo do Nmap 84 fecharArquivo(file);
85 //Saída de dados
86 escreva("#### RELATORIO DE ANALISE DO ARQUIVO DO NMAP ####"); 87 se(hosts == 1){
88 escreva("Existe [ ", hosts, "] Host Ativo."); 89 }senão{
90 escreva("Existem [ ", hosts, " ] Hots Ativos."); 91 }
92 se(portasAbertas == 1){
93 escreva("Existe [ ", portasAbertas, " ] Porta Aberta."); 94 }senão{
95 escreva("Existem [ "portasAbertas, " ] Portas Abertas."); 96 }
97 escreva("#### FREQUENCIA DE CADA PORTA ABERTA ####");
98 escreva(" +---+"); 99 escreva(" |--- Porta --- | --- Frequencia --- | --- Porcentagem do Total --- |"); 100 escreva(" +---+"); 101 para(i = 0; i < portasAbertas; i++){
102 se(contadorPortas[i] >= 1){
103 porcPorta[i] = ((contadorPortas[i] * 100.00) / portasAbertas);
104 escreva(" | ", numeroPorta[i], " | ", contadorPortas[i], " | ", porcPorta[i],"% |";
105 }
106 }
107 escreva(" +---+"); 108 escreva("#### DESCRICAO DOS SERVICOS DISPONIVEIS ####");
109 escreva(" +---+"); 110 escreva(" |--- Porta --- | --- Servico --- |"); 111 escreva(" +---+"); 112 para(i = 0; i < portasAbertas; i++){
113 se(contadorPortas[i] >= 1) {
114 escreva(" | ", numeroPorta[i]," | ", servicoPorta[i]);
115 }
116 }
117 escreva(" +---+"); 118 escreva("#### DESCRICAO DOS ENDERECOS ETHERNET ####"); 119 escreva(" +---+"); 120 escreva(" | --- IP --- | --- Mac Address --- |"); 121 escreva(" +---+"); 122 para(i = 0; i < macs; i++){
123 escreva(" | ", ip[i]," | ", nmac[i]," |"); 124 }
125 se(hosts > macs){
126 escreva(" | ", ip[i]," | MAC Desconhecido | --> Local Host <--"); 127 }
128 escreva(" +---+"); 129 escreva("#### TOTAL ENDERECO ETHERNET POR FABRICANTE ####");
130 escreva(" +---+"); 131 escreva(" |- Total - | --- MAC --- | --- Fabricante --- |"); 132 escreva(" +---+"); 133 para(i = 0; i < macs; i++){
134 se(contadorMacs[i] >= 1){
135 escreva(" | ", contadorMacs[i]," | ", macForn[i]," | ", nomeFabr[i]);
136 }
137 }
138 escreva(" +---+"); 139 escreva("Fim de Programa");
Apendice C
1 /*Alunos: Jonas Pires de Campos Neto 2 Rangel Rodigues Xavier de Assis
3 Raphael Pereira Modanez
4
5 Descrição: Programa em C para leitura de um arquivo gerado a partir de um scaneamento da rede 6 atravez do programa Nmap (utilizado o Zenmap, plataforma para windows do Nmap), e 7 através deste programa informar: 1. A frequência de cada porta aberta; 2. Descrição 8 dos serviços disponíveis de acordo com a porta aberta; 3. Descrição dos endereços
9 Ethernet; 4. Total de Endereços Ethernet por fabricante.*/
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 int main(void) {
15 //Declaração de variaveis
16 char line[1000], lineAux[1000], ip[1000][20];
17 char macadress[100][512], nmac[100][512], nomeFabr[100][512], servicoPorta[1000][20]; 18 char numPortas[1000][15], numPortasAux[1000][15], macForn[1000][15], macFornAux[1000][15]; 19 char numeroPorta[1000][15];
20 int hosts = 0, macs = 0, i, j, portasAbertas = 0, contadorPortas[1000], contadorMacs[1000]; 21 float porcPorta[1000];
22 //Abertura do Arquivo Nmap 23 FILE *file;
24 file= fopen("nmap.txt", "r"); 25 //Validacao do Arquivo 26 if(file == NULL){
27 printf("Nao foi possivel abrir o arquivo.\n"); 28 return 0;
29 }else{
30 //Processamento de dados
31 while((fgets(line, sizeof(line), file)) != NULL){ 32 //Inicia a variavel para contagem de portas abertas 33 contadorPortas[portasAbertas] = 0;
34 if((strstr(line, "/udp")) && (strstr(line, "/tcp")) || (strstr(line, "open"))){ 35 //Adiciona ao vetor o numero da porta e o servico da mesma
36 sscanf(line, "%s %*s %s", numPortas[portasAbertas], servicoPorta[portasAbertas]); 37 for(i = 0; line[i] != '/'; i++){
38 numeroPorta[portasAbertas][i] = numPortas[portasAbertas][i];
39 }
40 strcpy(numPortasAux[portasAbertas], numeroPorta[portasAbertas]); 41 //Associa o servico a porta
42 for(i = 0; i <= portasAbertas; i++){ 43 for(j = 0; j <= portasAbertas; j++){ 44 if(strcmp(numeroPorta[i], numPortasAux[j]) == 0){ 45 strcpy(numPortasAux[j], " "); 46 contadorPortas[i]++; 47 } 48 } 49 } 50 }
51 //Copia o numero de ip para o vetor e adiciona 1 a variavel contadora hosts 52 if((strncmp(line, "Nmap scan report", 16)) == 0){
53 sscanf(line,"%*s %*s %*s %*s %s", ip[hosts]);
54 hosts++;
55 }
56 //Copia o numero de mac para o vetor e adiciona 1 a variavel contadora macs 57 if((strncmp(line, "MAC Address:", 11)) == 0){
58 sscanf(line,"%*s %*s %s", nmac[macs]); 59 for(i = 32; line[i] != ')'; i++){ 60 nomeFabr[macs][i - 32] = line[i];
61 }
62 for(i = 0; i < 9; i++){
63 macForn[macs][i] = nmac[macs][i];
64 }
65 contadorMacs[macs] = 0;
66 strcpy(macFornAux[macs], macForn[macs]); 67 for(i = 0; i <= macs; i++){ 68 for(j = 0; j <= macs; j++){ 69 if(strcmp(macForn[i], macFornAux[j]) == 0){ 70 strcpy(macFornAux[j], " "); 71 contadorMacs[i]++; 72 } 73 } 74 } 75 macs++; 76 }
77 //adiciona 1 na variavel contadora portasAbertas 78 if (strstr(line, "open")) {
Apendice C
80 }
81 if (strstr(line, "open|filtered ports")){
82 portasAbertas--; 83 } 84 } 85 } 86 //Fechamento do arquivo 87 fclose(file); 88 //Saída de dados
89 printf("\n#################### RELATORIO DE ANALISE DO ARQUIVO DO NMAP ####################\n\n");
90 if(hosts == 1){
91 printf("Existe [ %d ] Host Ativo.\n\n", hosts); 92 }else{
93 printf("Existem [ %d ] Hots Ativos.\n\n", hosts); 94 }
95 if(portasAbertas == 1){
96 printf("Existe [ %d ] Porta Aberta.\n\n", portasAbertas); 97 }else{
98 printf("Existem [ %d ] Portas Abertas.\n\n", portasAbertas); 99 }
100 printf("####################### FREQUENCIA DE CADA PORTA ABERTA #######################\n\n"); 101 printf(" +---+\n"); 102 printf(" |--- Porta --- | --- Frequencia --- | --- Porcentagem do Total --- |\n");
103 printf(" +---+\n"); 104 for(i = 0; i < portasAbertas; i++){
105 if(contadorPortas[i] >= 1){
106 porcPorta[i] = ((contadorPortas[i] * 100.00) / portasAbertas);
107 printf(" | %5s | %3d | %.2f%% |\n", numeroPorta[i],
contadorPortas[i], porcPorta[i]);
108 }
109 }
110 printf(" +---+\n\n"); 111 printf("##################### DESCRICAO DOS SERVICOS DISPONIVEIS ####################\n\n"); 112 printf(" +---+\n");
113 printf(" |--- Porta --- | --- Servico --- |\n"); 114 printf(" +---+\n"); 115 for(i = 0; i < portasAbertas; i++){
116 if(contadorPortas[i] >= 1) {
117 printf(" | %5s | %s\n", numeroPorta[i], servicoPorta[i]);
118 }
119 }
120 printf(" +---+\n\n");
121 printf("##################### DESCRICAO DOS ENDERECOS ETHERNET ####################\n\n"); 122 printf(" +---+\n");
123 printf(" | --- IP --- | --- Mac Address --- |\n"); 124 printf(" +---+\n"); 125 for(i = 0; i < macs; i++){
126 printf(" | %s | %s |\n", ip[i], nmac[i]); 127 }
128 if(hosts > macs){
129 printf(" | %s | MAC Desconhecido* | * --> Local Host <--\n", ip[i]); 130 }
131 printf(" +---+\n\n");
132 printf("################### TOTAL ENDERECO ETHERNET POR FABRICANTE ##################\n\n"); 133 printf(" +---+\n");
134 printf(" |- Total - | --- MAC --- | --- Fabricante --- |\n"); 135 printf(" +---+\n"); 136 for(i = 0; i < macs; i++){
137 if(contadorMacs[i] >= 1){
138 printf(" | %3d | %s | %s\n", contadorMacs[i], macForn[i], nomeFabr[i] );
139 }
140 }
141 printf(" +---+\n"); 142 return 0;