UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en SistemasComputacionales
“ESCÁNER DE RED”
PROYECTO DE TESIS DE GRADOCURSO DE GRADUACIÓN
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autor(es):
FAUSTOS AYALA RUTH ELIZABETH
MENDOZA SANTANA MARIANA BEATRIZ
RIVERA BRIONES JOSE ENRIQUE
GUAYAQUIL-ECUADOR
Año: 2007
II
AGRADECIMIENTO
Agradecemos a Dios, sobre todas las
cosas, ya que sin él nuestras vidas no
hubiesen sentido esa gran fuerza espiritual
que siempre nos acompañó y poder así al
final concretar con una de nuestras metas
que un día nos propusimos cumplir.
Ruth, Beatriz y José
III
DEDICATORIA
Dedico este proyecto a mis padres,
Consuelito y Francisco, que siempre
estuvieron a mi lado, brindándome su
apoyo incondicional a todo lo que me
proponga, de esta manera poder
cumplir con mi meta profesional.
Gracias Mami y Papi, que Dios los
bendiga siempre.
Ruth Faustos Ayala
IV
DEDICATORIA
A los mejores Padres del Mundo…
los míos, por su esfuerzo constante y
apoyo innegable; quienes con
sabiduría y acertado conducción,
hicieron posible la culminación de mi
carrera.
… a ellos mil gracias por todo lo
recibido.
Beatriz Mendoza Santana.
V
DEDICATORIA
Este proyecto lo dedico primero que nadie a
Dios, gracias por otorgarme la sabiduría y la
salud para lograrlo.
Gracias a mis padres… Gracias a los
intercambios y exposiciones de ideas con
mis compañeros y amigos de estudios
durante mi vida universitaria.
José Rivera Briones.
VI
TRIBUNAL DE GRADUACIÓN
VII
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente a los suscritos
perteneciendo a la Universidad de Guayaquil los derechos que generen la
aplicación de la misma”
(Reglamento de Graduación de la Carrera de Ingeniería en Sistemas
computacionales, Art. 26)
VIII
RESUMEN
Las redes de computadoras son canales de comunicación compartidos. El
compartir, significa que las computadoras pueden recibir información
proveniente de otras maquinas. El capturar la información que viene de otra
parte de la red se le llama "sniffing", es decir, husmear la información que se
esta transfiriendo en la red.
La más popular manera de conectar computadoras es a través del Ethernet.
El cableado Ethernet trabaja por el envío de paquetes de información por
todos los nodos de la red. El paquete contiene en su cabecera la dirección de
la maquina destino. Solo la maquina que contenga dicha dirección podrá
aceptar el paquete. Una maquina que acepte todos los paquetes sin importar
los que contenga la cabecera, se dice que esta en estado promiscuo.
El Escáner de Red puede ser utilizado para "captar", lícitamente o no, los
datos que son transmitidos en la red. Nuestro proyecto también puede leer
los datos dentro del paquete así como la dirección de destino.
IX
ÍNDICE GENERAL
AGRADECIMIENTO II
DEDICATORIA III
TRIBUNAL DE GRADUACIÓN VI
DECLARACIÓN EXPRESA VII
RESUMEN VIII
ÍNDICE GENERAL IX
ÍNDICE DE FIGURAS XII
PARTE INTRODUCCIÓN
CAPÍTULO 1
ESCÁNER DE RED
1.1 Antecedentes 1
1.2. Problemáticas y soluciones 2
1.2.1 Violación a la DISPONIBILIDAD: Denegación de servicios 2
1.2.2 Violación a la CONFIDENCIALIDAD: Sniffers de red 3
1.2.3 Autenticación e integridad: firmas y certificados digitales 4
X
1.3. Misión 5
1.4. Visión 5
1.5. Objetivos generales 5
1.6. Objetivos específicos 5
1.7 . Alcance del proyecto 6
1.7.1 Funcionalidad 6
1.7.2 Interacción del programa 6
1.8 Beneficios 7
CAPITULO 2
ANÁLISIS
2.1. Antecedentes 8
2.2. Requerimientos 9
2.3. Análisis de requerimientos 11
2.4. Diagrama de Estado 13
2.5. Diagramas de Casos de Uso 14
2.6. Especificación de procesos: Captura de Paquetes 17
2.7. Diagrama de Eventos 18
2.8. Diagrama de Objetos 19
2.9. Diagrama de Flujo de Datos 20
XI
CAPITULO 3
DISEÑO
3.1. Diseño Arquitectónico 21
3.1.1. Arquitectura y Funcionalidad del proyecto 21
3.2. Diseño de Interfaz 22
CAPITULO 4
PRUEBAS
4.1. Pruebas de las paginas de la Aplicación 36
4.2 Pruebas de las clases utilizadas en la Aplicación 37
4.3 Pruebas del Sistema 38
CAPITULO 5
DESARROLLO E IMPLEMENTACIÓN
5.1. Desarrollo del sistema 39
5.2. Implementación del sistema 40
CAPITULO 6
RECOMENDACIONES Y CONCLUSIONES6.1 Recomendaciones 44
6.2 Conclusiones 45
GLOSARIOS DE TÉRMINOS
XII
ÍNDICE DE FIGURAS
Pág.
Fig. 2.1 Requerimientos 10
Fig. 2.2 Análisis de requerimientos 11
Fig. 2.3 Diagrama de estado 13
Fig. 2.4 Diagrama de caso de uso “Búsqueda de IP” 15
Fig. 2.5 Diagrama de caso de uso “Búsqueda de la MAC” 16
Fig. 2.6 Especificación de procesos de Captura de paquetes 17
Fig. 2.7 Diagramas de eventos 18
Fig. 2.8 Diagramas de objetos 19
Fig. 2.9 Diagramas de flujos de datos 20
Fig. 3.1 Diseño Arquitectónico y Funcionalidad 21
Fig. 3.2 Interfaz de ingreso de Usuario Administrador 22
Fig. 3.3 Menú principal del Escáner de Red 22
Fig. 3.4 Selección de tarjeta de red (LAN o Wireless) a capturar 23
Fig. 3.5 Proceso de inicio de captura de tramas de red 23
XIII
Fig. 3.6 Opción para finalizar el proceso de capturar tramas 24
Fig. 3.7 Trama de red capturada 24
Fig. 3.8 Selección de Reportes Acumulativos 25
Fig. 3.9 Selección de Reportes Continuo 25
Fig. 3.10 Selección de detalles del paquete “Capa de enlace de datos” 26
Fig. 3.11 Selección de detalles de Ethernet “capa de enlace de datos” 26
Fig. 3.12 Selección de detalles de IPv4 en la capa de red 27
Fig. 3.13 Selección de detalles de IPv6 en la capa de red 27
Fig. 3.14 Selección de detalles de ARP/RARP en la capa de red 28
Fig. 3.15 Selección de detalles de TCP en la capa de transporte 28
Fig. 3.16 Selección de detalles de UDP en la capa de transporte 29
Fig. 3.17 Selección de detalles de ICMP en la capa de transporte 29
Fig. 3.18 Selección de detalles de HTTP en la capa de aplicación 30
Fig. 3.19 Pestaña Extra, con resolver IP 30
Fig. 3.20 Ventana de Resolución de Direcciones IP 31
Fig. 3.21 Reporte Acumulativo de la información General
de la trama capturada 31
Fig. 3.22 Reporte Acumulativo de protocolo “Capa de Red ”
de la trama capturada 32
Fig. 3.23 Reporte Acumulativo de protocolo “Capa de Transporte ”
de la trama capturada 32
Fig. 3.24 Reporte Acumulativo “Memoria Libre” de la trama capturada 33
XIV
Fig. 3.25 Reporte Continúo de la información General 33
Fig. 3.26 Reporte Continúo de protocolo “Capa de Red ” 34
Fig. 3.27 Reporte Continúo de protocolo “Capa de Transporte ” 34
Fig. 3.28 Reporte Continúo “Memoria Libre” 35
Fig. 4.1 Mensaje de error de clave de usario incorrecto 37
Fig. 4.2 Mensaje de error 37
1
CAPITULO 1
ESCANER DE RED
1.1 Antecedentes
Es algo común que por topología de red y necesidad material, el medio de
transmisión sea compartido por varias computadoras y dispositivos de red, lo
que hace posible que un ordenador capture tramas de información no
destinadas a el.
Para conseguir esto el sniffer pone la tarjeta de red o NIC en un estado
conocido como modo promiscuo, en el cual la capa de enlace de datos no
son descartadas las tramas no destinadas a la MAC address de la tarjeta; de
esta manera se puede obtener todo tipo de información de cualquier aparato
conectado a la red.
2
1.2. Problemáticas y soluciones
Actualmente, una gran cantidad de tráfico confidencial viaja en claro, sin
ningún tipo de cifrado, por las redes de la mayoría de las empresas. Ese es
el entorno ideal para un "intruso malicioso" que puede acceder de forma
transparente a esa información y permitir que alguien abuse de su
conocimiento.
Basándonos en los principios de seguridad de la red, podemos clasificar en
tres tipos de problemas:
1.2.1. Violación a la DISPONIBILIDAD: Denegación de servicios
Algunas Técnicas DoS (Denial of Service) conocidas:
Envenenamiento de la cache ARP (ARP poissoning)
Inundación de Pings (Ping Flood o Smurf)
Ping de la muerte (Ping of Dead)
Bombas de Redirección
Fragmentación de IP (Teardrop)
Inundación por conexiones TCP semiabiertas (TCP SYN Flood)
Agotamiento de conexiones TCP (TCP Conection Exhaustion)
Inundación de UDP (UDP flood)
Ataque DoS Distribuido (DDoS)
Etc.
3
SOLUCION
Cerrar todos los puertos del sistema que no sean necesarios.
Proteger los sistemas y la red mediante un FIREWALL.
1.2.2. Violación a la CONFIDENCIALIDAD: Sniffers de red
Los Sniffers es una herramienta capaz de capturar toda la información
que circula a través de la tarjeta red.
Capturar nombres de usuarios y contraseñas de acceso a un
sistema
Capturar información privada que viaja por la red
o Correo electrónico y ficheros transmitidos por FTP, NFS, etc.
o Nº de tarjetas de crédito, PINs de acceso a cuentas bancarias.
SOLUCION
Uso de comunicaciones encriptadas
o Sustituir protocolos inseguros (Telnet, FTP, etc.) por
protocolos encriptados SSH, Telnet Seguro)
o Utilizar un sistema de encriptación de clave pública para:
Envío de correo electrónico
Transacciones de comercio electrónico, banca electrónica.
Uso de redes con switch
4
o En este tipo de redes el campo de acción del sniffer es mucho
más limitado
Uso de herramientas anti-sniffers
o Existen herramientas para detectar sniffers y tarjetas en modo
promiscuo
1.2.3. Autenticación e integridad: firmas y certificados digitales
Problemas de la firma digital:
¿Cómo tener certeza de que la clave pública de un usuario
corresponde realmente a ese individuo y no ha sido falsificada
por otro?
¿Quién verifica la identidad del poseedor de la clave pública?
SOLUCION
Certificados digitales
5
1.3. Misión
Detectar cada uno de los puertos de los elementos de la red, controlando y
detectando cada uno de los posibles huecos o brechas que se encuentren en
la red. Como también se analizará cada una de las direcciones IP y
Direcciones MAC que tengan asignados estos elementos.
1.4. Visión
Detectar y controlar los elementos existentes en la red, como también poder
analizar cada uno de los paquetes de información que la red este
transfiriendo.
1.5. Objetivos generales
Analizar toda la red.
Proporcionar la información de cada IP.
Identificar todas las posibles brechas de inseguridad.
Alertar al administrador de las debilidades antes de que un “intruso”
pueda encontrarlas.
1.6. Objetivos específicos
Obtener la dirección IP del equipo.
Obtener la dirección del MAC del equipo.
6
Identificar el nombre del equipo, tanto de la red principal como de las
sub redes.
Obtener paquetes de información de cada una de las máquinas.
Identificar las máquinas que se encuentren activas y no activas.
Desempaquetar y mostrar los paquetes de información que se
transfieren en la red en archivos de texto, para verificar que
información es la que se esta transfiriendo.
Categorizar los paquetes extraídos de cada maquina por protocolos de
comunicación, etc.
1.7. Alcance del proyecto
1.7.1. Funcional
Este escáner de red va a tener una funcionalidad hibrida, es decir, va
a funcionar como un simple scanner de red analizando la red existente
mediante diversos métodos potenciales que un “intruso” podría utilizar
para atacarla obteniendo información de cada máquina y a su vez
como un Escaner de Red, vamos a obtener los paquetes de
información que se están transfiriendo y desempaquetándolos para
que puedan ser legibles por el usuario.
1.7.2. Interacción del programa
La interacción va a ser en su gran mayoría grafica, facilitando su uso.
7
Uso de menús fácilmente comprensibles.
1.8. Beneficios
Como principal beneficio es la resolución de problemas de la red, tales como
el análisis del tráfico y la detección de posible problemas de configuración
(cables de red desconectados y tablas de rutas mal configuradas).
Además, con la experiencia del Administrador de la red, se podrá utilizarlo
como detector de intrusos, de tal forma que sea ubicado estratégicamente
para monitorizar el tráfico de la red.
8
CAPITULO 2
ANALISIS
2.1. Antecedentes
El software de sistema son conjuntos de programas escritos para servir a
otros programas. Algunos programas procesan datos en gran medida
indeterminados.
En cualquier caso, el área del software de sistemas se caracteriza por una
fuerte interacción con el hardware de la computadora; una gran utilización de
múltiples usuarios; una operación concurrente que requiere planificación, una
compartición de recursos y una sofisticada gestión de procesos; unas
estructuras de datos complejas y múltiples interfaces externas.
9
Todo el desarrollo del software se puede caracterizar como bucle de
resolución de problemas en el que se encuentran cuatro etapas distintas:
Status quo, definición de problemas, desarrollo técnico e integración de
soluciones.
Status quo, representa el estado actual de sucesos; la definición de
problemas identifica el problema especifico a resolverse; el desarrollo
técnico, resuelve el problema a través de la aplicación de alguna tecnología y
la integración de soluciones, ofrece los resultados a los que solicitan la
solución en primer lugar.
Todas las etapas descritas anteriormente coexisten simultáneamente en
algún nivel de detalle.
2.2. Requerimientos
Se necesita un aplicativo que realice un escaneo de una red, si importar que
esta sea lambrica o inalámbrica, reconociendo todas las maquinas que estén
conectadas a la red sin importar que esta este activa o no.
El medio de reconocer las maquinas conectadas podría variar entre un
simple mensaje de contestación de aceptación o de verificación o un
10
escaneo de puertos abiertos el medio podría variar según la facilidad de la
aplicación.
Una vez que la maquina que tenga el aplicativo este conectada o enlazada a
la red, tendría información de los equipos conectados como dirección MAC,
dirección IP, nombre del equipo entre otras características adicionales que
también serian importantes para identificar claramente los equipos.
Hay que aclarar que un requerimiento importante seria que al escanear la
red, se pueda ingresar un rango de direcciones IP para agilitar el escaneo o
mejor aun si se conoce una dirección IP especifica.
Fig. 2.1 Requerimientos
11
Además de los requerimientos anteriores se necesita también que el
aplicativo también ejerza la función de sniffer de red con la característica
fundamental que el aplicativo pueda abrir los paquetes que se están
transfiriendo en la red desde un equipo a otro.
Esta de más aclarar que no solo basta con abrir el paquete si no también
poder leerlo, es decir poder armar el contenido y poder visualizarlo en un
archivo de texto donde este sea guardado si el usuario lo requiere.
2.3. Análisis de requerimientos
Fig. 2.2 Análisis de requerimientos
Analizando los principios básicos del escáner de red tenemos como
características principales los elementos mostrados en el gráfico anterior, los
cuales desglosaremos de una manera más detallada más adelante, para este
gráfico se toma cada elemento como una caja negra de manera general, de
lo que se tendría que emplear el escáner de red.
Enlaza a laRed
Verifica Recopila
Escáner de red
12
El primer factor se trata de enlace de red, es decir, que la maquina en la que
se encuentra la aplicación debe conectarse a una red determinada sea esta
lambrica como inalámbrica, lo cual seria indiferente ya que lo único
fundamental en este punto seria que la maquina implicada tenga acceso a
una red.
Segundo elemento seria el de verificar las maquinas existentes tanto en la
red como en una sub red, estableciendo comunicación con las maquinas
existentes dentro de la red como en sus sub redes, estableciendo
comunicación mediante un mensaje que será enviado desde la maquina en
la cual se encuentra la aplicación hacia la maquina o maquinas conectadas a
la red, la cual o cuales enviaran una señal o mensaje de respuesta como
confirmación que se encuentre activa o no.
Tercer factor se encuentra la recopilación de la información que es
proporcionada por las maquinas que se encuentran en la red, esta
información consta de la dirección IP de la maquina, nombre de la maquina,
el MAC address y de la tasa de transferencia de la red.
13
2.4. Diagrama de Estados
Los diagramas de estados muestran el comportamiento de los objetos, es
decir, el conjunto de estados por los cuales pasa un objeto durante su vida,
junto con los cambios que permiten pasar de un estado a otro.
Identifica un periodo de tiempo del objeto (no instantáneo) en el cual el objeto
esta esperando alguna operación, tiene cierto estado característico o puede
recibir cierto tipo de estímulos.
Fig. 2.3 Diagrama de estado
14
2.5. Diagramas de Casos de Uso
Identificar los actores:
Administrador de Red
Encargado de gestionar, controlar y administrar cada uno de los
componentes de la red.
Verificando seguridad y comunicación de la red.
Solucionar congestionamiento y configurar correctamente la red
para que esto no ocurra.
Tareas que realiza el administrador de red
Seguridad de la red
Configuración de la red
Verificar de puertos físicos y lógicos
Manejo de grupos de conexión
15
Matriz caso de uso: Obtener direcciones IP del equipo
Nombre Buscar Dirección IP
Actor Administrador de red
Función
Buscar Dirección IP que permite realizar una consulta para
verificar y además encontrar elementos de la red.
Se envía una consulta a cada uno de los elementos,
esperando la respuesta de ellos.
La búsqueda retornará la información requerida, o un
mensaje en el caso que no haya ninguna información
Nombre Obtener Dirección IP
Actor Administrador de red
Función Retorna la información de la IP requerida
Si no existe retornará un mensaje de error o aviso
Fig. 2.4 Diagrama de caso de uso “Busquedad de IP”
16
Matriz caso de Uso: Obtener direcciones MAC del equipo
Nombre Buscar Dirección MAC
Actor Administrador de red
Función
Permite verificar el identificador asignado, en cada unas de
los equipos.
Buscar Dirección MAC que permite realizar una consulta
para verificar y además encontrar elementos de la red.
Se envía una consulta a cada uno de los elementos,
esperando la respuesta de ellos.
La búsqueda retornará la información requerida.
Nombre Obtener Dirección MAC
Actor Administrador de red
Función Retorna la información de la MAC requerida
Si no existe retornará un mensaje de error o aviso
Fig. 2.5 Diagrama de caso de uso “Busquedad de la MAC”
17
2.6. ESPECIFICACION DE PROCESOS: CAPTURA DE PAQUETES
Fig. 2.6 Especificación de procesos de Captura de paquetes
18
2.7. DIAGRAMA DE EVENTOS
Permiten mostrar los escenarios, identificando los eventos y los objetos que
intercambian eventos, o los agentes que intercambian eventos con el
sistema.
Son una representación de la realidad indicando la secuencia de eventos
Fig. 2.7 Diagramas de eventos
19
2.8. DIAGRAMA DE OBJETOS
Los diagramas de objetos modelan las instancias de elementos contenidos
en los diagramas de clases. Se utilizan para visualizar, especificar, construir
y documentar la existencia de ciertas instancias en el sistema, junto a las
relaciones entre ellas.
Fig. 2.8 Diagramas de objetos
20
2.9. DIAGRAMA DE FLUJO DE DATOS
Los diagramas de flujo son una manera de representar visualmente el flujo
de datos a través de sistemas de tratamiento de información. Los diagramas
de flujo describen que operaciones y en que secuencia se requieren para
solucionar un problema dado.
Son representación diagramático que ilustra la secuencia de las operaciones
que se realizarán para conseguir la solución de un problema.
Fig. 2.9 Diagramas de flujos de datos
21
CAPITULO 3
DISEÑO
3.1. Diseño Arquitectónico
3.1.1. Arquitectura y Funcionalidad del proyecto
Fig. 3.1 Diseño Arquitectónico y Funcionalidad
22
3.2. Diseño de Interfaz
La interfaz que se ha desarrollado en este sistema se detalla a continuación:
Fig. 3.2 Interfaz de ingreso de Usuario Administrador
Fig. 3.3 Menú principal del Escaner de Red
23
Fig. 3.4 Selección de tarjeta de red (LAN o Wireless) a capturar
Fig. 3.5 Proceso de inicio de captura de tramas de red
24
Fig. 3.6 Opción para finalizar el proceso de capturar tramas
Fig. 3.7 Trama de red capturada
25
Fig. 3.8 Selección de Reportes Acumulativos
Fig. 3.9 Selección de Reportes Continuo
26
Fig. 3.10 Selección de detalles del paquete “Capa de enlace de datos”
Fig. 3.11 Selección de detalles de Ethernet en la capa de enlace de datos
27
Fig. 3.12 Selección de detalles de IPv4 en la capa de red
Fig. 3.13 Selección de detalles de IPv6 en la capa de red
28
Fig. 3.14 Selección de detalles de ARP/RARP en la capa de red
Fig. 3.15 Selección de detalles de TCP en la capa de transporte
29
Fig. 3.16 Selección de detalles de UDP en la capa de transporte
Fig. 3.17 Selección de detalles de ICMP en la capa de transporte
30
Fig. 3.18 Selección de detalles de HTTP en la capa de aplicación
Fig. 3.19 Pestaña Extra, con resolver IP
31
Fig. 3.20 Ventana de Resolución de Direcciones IP
Fig. 3.21 Reporte Acumulativo de la información General
de la trama capturada
32
Fig. 3.22 Reporte Acumulativo de protocolo “Capa de Red ”
de la trama capturada
Fig. 3.23 Reporte Acumulativo de protocolo “Capa de Transporte ”
de la trama capturada
33
Fig. 3.24 Reporte Acumulativo “Memoria Libre”
de la trama capturada
Fig. 3.25 Reporte Continúo de la información General
de la trama capturada
34
Fig. 3.26 Reporte Continúo de protocolo “Capa de Red ”
de la trama capturada
Fig. 3.27 Reporte Continúo de protocolo “Capa de Transporte ”
de la trama capturada
35
Fig. 3.28 Reporte Continúo “Memoria Libre”
de la trama capturada
36
CAPITULO 4
PRUEBAS
4.1. PRUEBAS DE LAS PÁGINAS DE LA APLICACIÓN
Para nuestro proyecto “Escaner de Red”, hemos reaiizado las siguientes
pruebas:
Menú Principal
Cada opción del menú principal invoca a la página que le corresponde.
Tipos de datos
Se verificó que al elegir una o varias opciones en el detalle, sólo se
mostrará la información escogida por el usuraio.
Se verificó que en los tipos de datos, no envien datos inconsistentes.
37
Se verificó que en los campos obligatorios sean ingresados con datos
validos.
Fig. 4.1 Mensaje de error de clave de usario incorrecto
Fig. 4.2 Mensaje de error
Consultas
Se ha verficado que se muestre los datos de manera correcta.
4.2 PRUEBA DE LAS CLASES UTILIZADAS EN LA APLICACION
Se ha realizado pruebas con cada una de las clases, de tal manera que cada
método solo trabaje con su misma funcionalidad, de manera independiente,
es decir, que cada entidad va a realizar sus propias actividades sin que ella
intervenga en las demás. Tratando de encapsular dentro de cada clase una
entidad que las permita identificarse de manera adecuada.
38
4.3 PRUEBAS DEL SISTEMA
Las interfases que han sido desarrolladas en este sistema son amigables, de
fácil comprensión y manejo para el usuario, cabe recalcar que este sistema
debe ser utilizado como detector de intrusos, tomando en consideración la
experiencia del Administrador de la red, de tal forma que sea ubicado
estratégicamente para monitorizar el tráfico de la red administrado por
personas que tengan los conocimientos suficientes en lo que se refiere al
manejo de redes, o a su vez, bases solidades en sistemas de información.
39
CAPITULO 5
DESARROLLO E IMPLEMENTACION
5.1. Desarrollo del sistema
El aplicativo “Escaner de Red” se desarrolló utilizando una arquitectura
orientada a objetos, ya que a cada entidad del aplicativo se relaciona como
un objeto, con sus propias características y funcionalidades.
Las creaciones de las clases están siendo utilizadas de tal manera, que cada
método es asignado con un rol específico, es decir, que cada clase
contendrá solo la funcionalidad de ella misma. Tratando de encapsular dentro
de cada clase una entidad que las permita identificarse de manera adecuada.
40
5.2. Implementacion del sistema
Para nuestro proyecto se consideró como principal objetivo la correcta
delegación de las actividades a cada una de las entidades que intervienen en
el aplicativo “Escaner de Red”, es decir, que cada entidad va a realizar sus
propias actividades sin que ella intervenga en las demás.
Es importante mencionar que al usar la programación orientada a objetos,
significa que la única manera de acceder a los atributos de un objeto es
mediante sus métodos, de otra manera no se puede acceder a la
información.
La jerarquía se desarrollo de acuerdo a las categorías de las clases, es decir,
podemos mencionar como ejemplo a los paquetes de la interfaz gráfica
donde se encontrarán las respectivas clases y métodos concernientes a todo
lo que tiene que ver con la presentación del aplicativo.
De acuerdo al patrón o estructura de desarrollo que estamos siguiendo
también hay que tener en cuenta que cada clase tendrá los correspondientes
métodos que proporcionan información importante de cada objeto que se
esta usando.
41
El paquete de la trama es capturado por la clase “JDcaptor”, proporcionando
la información para cada una de las entidades. Cada clase en el momento de
realizar la “instancia” hace una conversión o un “cast” de tipo paquete
(packet) al tipo de objeto que se está utilizando en ese momento. Teniendo
como clase principal “JpcapSniffer”, cuyo propósito es de instanciar a las
demás clases: ARPAnalyzer, EthernetAnalyzer, FTPAnalyzer,
HTTPAnalyzer, ICMPAnalyzer, IPv4Analyzer, IPv6Analyzer,
JDPacketAnalyzer, PacketAnalyzer, POP3Analyzer, SMTPAnalyzer,
SSHAnalyzer, TCPAnalyzer, TelnetAnalyzer, UDPAnalyzer; dentro de esta
clase principal hacemos referencia que vamos a utilizar las librerías JPCAP.
Una vez que el usuario escoge la interfaz de red, en la cual se va a realizar la
captura, en ese instante se activará la tarjeta de red en modo promiscuo, a
manera de programación se diría que en ese momento se hace la invocación
del método que dispara un hilo (tread), es decir, se crea un ciclo en la cual
siempre va a estar escuchando los paquetes que transitan por la red, de esta
manera capturarlos para luego presentarlos en una interfaz gráfica.
Se ha definido un máximo de paquetes capturados, que en este caso son
10.000 paquetes, ya que al momento de llegar a la base se realiza el proceso
de cola, es decir, si esta lleno el repositorio y si ingresa una nueva trama,
42
entonces se eliminará el primero que ingresó a la cola para dar cabida al
último en ingresar.
En la presentación de los reportes estadísticos, JPCAP dispone de métodos
que nos proporcionan una interfaz gráfica porcentual (diagramas de pasteles
y de líneas), proporcionado al usuario una mejor visualización de la
información de la trama, en cuanto a los protocolos que mas han sido
utilizados.
Además, el proyecto consta de un archivo que carga por defecto la
configuración de nuestro aplicativo e inclusive sólo proporciona los datos
escogidos a interés del usuario, muestra la información de los detalles de los
protocolos que intervienen en el modelo OSI, como por ejemplo: IP Fuente,
IP Destino, Puerto Fuente, Puerto Destino, MAC fuente, Tiempo de captura,
longitud de la captura, etc. Obteniendo como resultado que el aplicativo sea
mucho más amigable para el usuario y parametrizable a la vez, dejándole al
usuario la elección de la información que quiera ver.
Explicando un poco mas a fondo denotamos que el aplicativo esta dividido o
modula rizado por medio de paquetes, cada paquete contiene clases que
realizan una actividad especifica.
43
Conforme a la presentación de la información de los paquetes los hacemos
mediante tablas usando las librerías de java.awt y java.swing, entre otras.
Este aplicativo se ejecuta en Stand Alone, además que la información que se
presenta se actualiza constantemente, por ello, es que se requiere de cierta
cantidad de memoria para que se pueda visualizar sin inconvenientes,
evitando que la máquina se vuelva lenta o que de la impresión que el
aplicativo se ha inhibido.
44
CAPITULO 6
RECOMENDACIONES Y CONCLUSIONES
6.1 Recomendaciones
El Aplicativo debe ser instalado por la versión JPCAP 5.0.1
Que en el Sniffer se instale un gateway, con el objetivo de capturar la
información que transita por la red
Que al equipo al que le vamos a instalar tenga un mínimo de memoria
de 512 MB, debido a que la información de la interfaz se recarga cada
cierto tiempo
No guardar información innecesaria
45
6.2 Conclusiones
Todo organización ya sea grande o pequeña debe contener herramientazas
a nivel de seguridad que puedan proporcionarles a esta cual es el estado del
flujo de la información que transita a través de la red, y así de esta manera
tomar las medidas necesarias y poder controlar la información que pueden
ser accedidas por individuos.
Y de esta manera proteger unos de los recursos mas importantes de una
organización como es la información
1
GLOSARIO
Acceso directo: En los sistemas operativos de Microsoft es un ícono que
permite abrir más fácilmente un determinado programa o archivo. Tiene un
papel similar a los enlaces simbólicos de los sitemas Unix, pero con la
diferencia de que es solamente reconocido por la interfaz visual (el "shell").
Adjunto: Se llama así a un archivo de datos (por ejemplo una plantilla de
cálculo o una carta de procesador de textos) enviado junto a un mensaje de
correo electrónico.
Algoritmo: Conjunto de reglas bien definidas para la resolución de un
problema. Un programa de software es la transcripción, en lenguaje de
programación, de uno o más algoritmos.
AGP: Puerto acelerador de gráficos. Permite enviar las imágenes más
velozmente desde la memoria del ordenador a la de la tarjeta gráfica, que es
la que genera la señal de video que sale para el monitor.
2
Ancho de banda (bandwidth) Término técnico que determina el volumen
de información que puede circular por un medio físico de comunicación de
datos, es decir, la capacidad de una conexión. A mayor ancho de banda,
mejor velocidad de acceso y mayor tráfico.
Antivirus son programas cuya función es detectar y eliminar Virus
informáticos y otros programas maliciosos (a veces denominados malware).
Normalmente un antivirus tiene un componente que se carga en memoria y
permanece en ella para verificar todos los archivos abiertos, creados,
modificados y ejecutados en tiempo real. Es muy común que tengan
componentes que revisen los adjuntos de los correos electrónicos salientes
y entrantes, así como los scripts y programas que pueden ejecutarse en un
navegador web (ActiveX, Java, JavaScript).
ARP Es un protocolo de nivel de red responsable de encontrar la dirección
hardware (Ethernet MAC) que corresponde a una determinada dirección IP.
Para ello se envía un paquete (ARP request) a la dirección de multidifusión
de la red (broadcast (MAC = ff ff ff ff ff ff)) conteniendo la dirección IP por la
que se pregunta, y se espera a que esa máquina (u otra) responda (ARP
reply) con la dirección Ethernet que le corresponde. Cada máquina mantiene
una caché con las direcciones traducidas para reducir el retardo y la carga.
3
ARP permite a la dirección de Internet ser independiente de la dirección
Ethernet, pero esto solo funciona si todas las máquinas lo soportan.
Base o banco de datos Es un conjunto de datos que pertenecen al mismo
contexto almacenados sistemáticamente para su posterior uso. En este
sentido, una biblioteca puede considerarse una base de datos compuesta en
su mayoría por documentos y textos impresos en papel e indexados para su
consulta.
Backbone (eje central) Nivel más alto en una red jerárquica. Se garantiza
que las redes aisladas (stub) y de tránsito (transit) conectadas al mismo eje
central están interconectadas. Conexión de alta velocidad que conecta a
computadoras encargadas de circular grandes volúmenes de información.
Los backbones conectan ciudades, o países, y constituyen la estructura
fundamental de las redes de comunicación. Usado para interconectar redes
entre sí utilizando diferentes tipos de tecnologías.
Backup Término habitualmente usado en informática. Se refiere al hecho de
crear una copia de seguridad de datos alojados en un determinado medio. Se
hace para prevenir una posible pérdida de información. Los datos alojados en
4
el backup sirven para volver a un estado anterior de la información en caso
de un desastre.
Bit abreviatura de binary digit (dígito binario). El bit es la unidad más
pequeña de almacenamiento en un sistema binario dentro de una
computadora.
Browser Buscador (navegador o visualizador) Programa que permite leer
documentos en la Web y seguir enlaces (links) de documento en documento
de Hipertexto. Los navegadores "piden" archivos (páginas y otros) a los
servidores de Web según la elección del usuario y luego muestran en el
monitor el resultado.
Byte unidad de información utilizada por las computadoras. Cada byte está
compuesto por ocho bits.
Buffer Un buffer de datos es una ubicación de la memoria en una
computadora o en un instrumento digital reservada para el almacena miento
5
temporal de información digital, mientras que está esperando ser procesada.
Por ejemplo, un analizador TRF tendrá uno o varios bufers de entrada, donde
se guardan las palabras digitales que representan las muestras de la señal
de entrada.
CPU unidad central de proceso o simplemente procesador. Es el
componente en una computadora digital que interpreta las instrucciones y
procesa los datos contenidos en los programas de computadora. Los CPU
proporcionan la característica fundamental de la computadora digital, la
programabilidad, y son uno de los componentes necesarios encontrados en
las computadoras de cualquier tiempo, junto con el almacenamiento primario
y las facilidades de entrada/salida. Es conocido como microprocesador el
CPU que es manufacturado con circuitos integrados.
Dirección Existen tres tipos de dirección de uso común dentro de Internet:
"Dirección de correo electronico" (email address); "IP" (dirección internet); y
"dirección hardware" o "dirección MAC" (hardware or MAC address).
Dirección Internet Dirección IP que identifica de forma inequívoca un nodo
en una red internet
6
E-mail, es un servicio de red para permitir a los usuarios enviar y recibir
mensajes mediante sistemas de comunicación electrónicos. Principalmente
se usa este nombre para denominar al sistema que provee este servicio en
Internet, mediante el protocolo SMTP, aunque por extensión también puede
verse aplicado a sistemas análogos que usen otras tecnologías. Por medio
de mensajes de correo electrónico se puede enviar, no solamente texto, sino
todo tipo de documentos. Su eficiencia, conveniencia y bajo costo están
logrando que el correo electrónico desplace al correo normal para muchos
usos habituales.
Emulación proceso de compatibilización entre computadoras mediante un
software.
Ethernet es el nombre de una tecnología de redes de computadoras de área
local (LANs) basada en tramas de datos. El nombre viene del concepto físico
de ether. Ethernet define las características de cableado y señalización de
nivel físico y los formatos de trama del nivel de enlace de datos del modelo
OSI. Ethernet se refiere a las redes de área local y dispositivos bajo el
estándar IEEE 802.3 que define el protocolo CSMA/CD, aunque actualmente
se llama Ethernet a todas las redes cableadas que usen el formato de trama
7
descrito más abajo, aunque no tenga CSMA/CD como método de acceso al
medio.
Extranet parte de una intranet de acceso disponible a clientes y otros
usuarios ajenos a la compañía.
Fast Ethernet Un nuevo estándar de Ethernet que provee velocidad de 100
Mb por segundo (a diferencia de los 10 Mb por segundo de las redes
Ethernet convencionales).
FDDI (Fiber Distributed Data Interface): Interfaz de datos distribuidos por fibra
óptica. Se trata de una red de 100 Mb por segundo en topología en estrella o
anillo muy utilizada en backbones, hoy desplazada por nuevas tecnologías
como ATM.
Firewall (muralla de fuego): es un software especial que un ordenador o
computadora corre para prevenir el acceso de usuarios no autorizados a la
red. Todo el tráfico de la red e Internet pasa primero a través del firewall.
8
Fibra óptica Tecnología para transmitir información como pulsos luminosos
a través de un conducto de fibra de vidrio. La fibra óptica transporta mucha
más información que el Cable de cobre convencional. La mayoría de las
líneas de larga distancia de las compañías telefónicas utilizan la fibra óptica.
FIFO es el acrónimo inglés de First In, First Out (primero en entrar, primero
en salir). se utiliza también en estructuras de datos para implementar colas.
La implementación puede realizarse con ayuda de arrays o vectores, o bien
mediante el uso de punteros
FTP (Protocolo de Transferencia de Ficheros) Protocolo que permite a un
usuario de un sistema acceder, y transferir a y desde, otro sistema de una
red. FTP es también habitualmente el nombre del programa que el usuario
invoca para ejecutar el protocolo.
Gateway (pasarela) Hoy se utiliza el término "router" (direccionador) en lugar
de la definición original de "gateway". Actualmente una pasarela es un
programa o dispositivo de comunicaciones que transfiere datos entre redes
que tienen funciones similares pero operativas diferentes utilizado para
conectar diferentes tipos de ambientes operativos. Típicamente se usan para
conectar redes LAN a minicomputadores o mainframes.
9
GNU/Linux (GNU con Linux o GNU+Linux) es la denominación defendida
por Richard Stallman y otros para el sistema operativo que utiliza el kernel
Linux en conjunto con las aplicaciones de sistema creadas por el proyecto
GNU y de varios otros proyectos/grupos de software. Comúnmente este
sistema operativo es denominado como Linux
Gusano es un virus informático o programa autoreplicante que no altera los
archivos sino que reside en la memoria y se duplica a sí mismo. Los
gusanos utilizan las partes automáticas de un sistema operativo que
generalmente son invisibles al usuario. Es algo usual detectar la presencia
de gusanos en un sistema cuando, debido a su incontrolada replicación, los
recursos del sistema se consumen hasta el punto de que las tareas
ordinarias del mismo son excesivamente lentas o simplemente no pueden
ejecutarse.
Hacker (pirata) Una persona que goza alcanzando un conocimiento profundo
sobre el funcionamiento interno de un sistema, de un ordenador o de una red
de ordenadores. Este término se suele utilizar indebidamente como
peyorativo, cuando en este último sentido sería más correcto utilizar el
término "cracker".
10
Header (cabecera) Parte inicial de un paquete, que precede a los datos
propiamente dichos y que contiene las direcciones de origen y destino,
control de errores y otros campos. Una cabecera es también la porción de un
mensaje de correo electrónico que precede al mensaje propiamente dicho y
contiene, entre otras cosas, el emisor del
mensaje, la fecha y la hora.
Host (sistema central) Ordenador que permite a los usuarios comunicarse
con otros sistemas centrales de una red. Los usuarios se comunican
utilizando programas de aplicación, tales como el correo electrónico, Telnet y
FTP.
Housig Es una modalidad de alojamiento Web destinado principalmente a
grandes empresas y a empresas de servicios Web. Consiste básicamente
en vender o alquilar un espacio físico de un centro de datos para que el
cliente coloque ahí su propio ordenador. La empresa le da la corriente y la
conexión a Internet, pero el servidor lo elige completamente el cliente,
incluso el hardware
Hub Concentrador. Dispositivo que se utiliza típicamente en topología en
estrella como punto central de una red, donde por ende confluyen todos los
enlaces de los diferentes dispositivos de la red.
11
Internet Si bien "internet" es una red, el término "internet" se usa
habitualmente para referirse a un conjunto de redes interconectadas
mediante direccionadores (rotures).
Intranet es una red de ordenadores de una red de área local (LAN) privada
empresarial o educativa que proporciona herramientas de Internet, la cual
tiene como función principal proveer lógica de negocios para aplicaciones de
captura, reportes, consultas, etc. con el fin de auxiliar la producción de
dichos grupos de trabajo; es también un importante medio de difusión de
información interna a nivel de grupo de trabajo. No necesariamente
proporciona Internet a la organización; normalmente, tiene como base el
protocolo TCP/IP de Internet y, por ser privada, puede emplear mecanismos
de restricción de acceso a nivel de programación como lo son usuarios y
contraseñas de acceso o incluso a nivel de hardware como un sistema
firewall (cortafuegos) que pueda restringir el acceso a la red organizacional.
La Intranet fue creada para mayor seguridad para poder compartir archivos,
carpetas y recursos.
Interfaz Elemento de transición o conexión que facilita el intercambio de
datos. El teclado, por ejemplo, es una interfaz entre el usuario y la
computadora.
12
IP Protocolo de Internet.
Kernel es la parte fundamental de un sistema operativo. Es el software
responsable de facilitar a los distintos programas acceso seguro al hardware
de la computadora o en forma más básica, es el encargado de gestionar
recursos, a través de servicios de llamada al sistema. Como hay muchos
programas y el acceso al hardware es limitado, el núcleo también se encarga
de decidir qué programa podrá hacer uso de un dispositivo de hardware y
durante cuánto tiempo, lo que se conoce como multiplexado. Acceder al
hardware directamente puede ser realmente complejo, por lo que los núcleos
suelen implementar una serie de abstracciones del hardware. Esto permite
esconder la complejidad, y proporciona una interfaz limpia y uniforme al
hardware subyacente, lo que facilita su uso para el programador.
Lenguaje de Programación es un lenguaje que puede ser utilizado para
controlar el comportamiento de una máquina, particularmente una
computadora. Consiste en un conjunto de reglas sintácticas y semánticas
que definen su estructura y el significado de sus elementos,
respectivamente.
13
Linux Es la denominación de un sistema operativo tipo-Unix y el nombre de
un núcleo. Es uno de los paradigmas más prominentes del software libre y
del desarrollo del código abierto, cuyo código fuente está disponible
públicamente y cualquier persona puede libremente usarlo, estudiarlo,
redistribuirlo y, con los conocimientos informáticos adecuados, modificarlo[1].
Paquete (packet): La parte de un mensaje que se transmite por una red.
Antes de ser enviada a través de Internet, la información se divide en
paquetes.
Protocolo Un conjunto de reglas formales que describen como se trasmiten
los datos, especialmente a través de la red, para la comunicación entre dos
entidades pares. Informalmente: lenguaje que utilizan, por ejemplo, dos
computadoras para comunicarse a cierto nivel. Los protocolos de más bajo
nivel definen los estándares eléctricos y físicos que deben observarse.
Ejemplos típicos de protocolos de comunicaciones: PPP, IP, TCP, UDP,
HTTP, FTP
14
RAM Se trata de una memoria de semiconductor en la que se puede tanto
leer como escribir información. Es una memoria volátil, es decir, pierde su
contenido al desconectar la energía eléctrica. Se utiliza normalmente como
memoria temporal para almacenar resultados intermedios y datos similares
no permanentes. Se dicen "de acceso aleatorio" o "de acceso directo"
porque los diferentes accesos son independientes entre sí. Por ejemplo, si
un disco rígido debe hacer dos accesos consecutivos a sectores alejados
físicamente entre sí, se pierde un tiempo en mover la cabeza hasta la pista
deseada (o esperar que el sector pase por debajo, si ambos están en la
misma pista), tiempo que no se pierde en la RAM.
ROM: Read Only Memory: Memoria de sólo lectura. Memoria incorporada
que contiene datos que no pueden ser modificados. Permite a la
computadora arrancar. A diferencia de la RAM, los datos de la memoria ROM
no se pierden al apagar el equipo.
Router (enrutador o encaminador): sistema constituido por hardware y
software para la transmisión de datos en la Internet. El emisor y el receptor
deben utilizar el mismo protocolo.// Dispositivo que dirige el tráfico entre
redes y que es capaz de determinar los caminos más eficientes, asegurando
un alto rendimiento.
15
Servidor Es una aplicación informática o programa que realiza algunas
tareas en beneficio de otras aplicaciones llamadas clientes. Algunos servicios
habituales son los servicios de archivos, que permiten a los usuarios
almacenar y acceder a los archivos de un ordenador y los servicios de
aplicaciones, que realizan tareas en beneficio directo del usuario final. Este
es el significado original del término. Es posible que un ordenador cumpla
simultáneamente las funciones de cliente y de servidor.
Switch (en castellano "conmutador") es un dispositivo electrónico de
interconexión de redes de computadoras que opera en la capa 2 (nivel de
enlace de datos) del modelo OSI (Open Systems Interconection). Un
conmutador interconecta dos o más segmentos de red, funcionando de
manera similar a los puentes (bridges), pasando datos de un segmento a
otro, de acuerdo con la dirección MAC de destino de los datagramas en la
red
SMTP protocolo simple de transferencia de correo electrónico. Protocolo de
red basado en texto utilizado para el intercambio de mensajes de correo
electrónico entre computadoras o distintos dispositivos (PDA's, teléfonos
móviles, etc.). Está definido en el RFC 2821 y es un estándar oficial de
Internet.
16
Sniffer es un programa de captura de las tramas de red. Generalmente se
usa para gestionar la red con una finalidad docente, aunque también puede
ser utilizado con fines maliciosos.
Socket designa un concepto abstracto por el cual dos programas
(posiblemente situados en computadoras distintas) pueden intercambiarse
cualquier flujo de datos, generalmente de manera fiable y ordenada.
Tarjeta de red Pieza de hardware encargada de comunicar el ordenador con
otros ordenadores
ÍNDICE GENERAL
MANUAL DE USUARIO
1. Ingreso al sistema 1
2. Menú principal 2
3. Sistema 4
4. Archivo 4
5. Ingreso al sistema “Escáner de Red” 5
6. Capturar la trama de red 6
7. Detalles 8
8. Reportes / Estadísticas 13
9. Extra 15
MANUAL TÉCNICO
1. Herramientas utilizadas 16
1.1. Descripción del Jpcap 16
1.2. Instalación del Jpcao 17
1.3. Instalación de Eclipse 18
2. Codificación del programa 19
2.1. Clases principales 19
2.1.1. JDCaptor. Java 19
2.1.2. JpcapSniffer. Java 25
2.1.3. JDPacketAnalyzerLoader 28
2.1.4. JDStatisticsTakerLoader 29
2.2 Clases de los protocolos 30
2.2.1. ARPAnalyzer 30
2.2.2. EthernetAnalyzer 33
2.2.3. FTPAnalyzer 35
2.2.4. HTTPAnalyzer 36
2.2.5. ICMPAnalyzer 38
2.2.6. IPv4Analyzer 41
2.2.7. IPv6Analyzer 44
2.2.8. JDPacketAnalyzer 46
2.2.9. PacketAnalyzer 47
2.2.10. POP3Analyzer 49
2.2.11. SMTPAnalyzer 50
2.2.12. SSHAnalyzer 51
2.2.13. TCPAnalyzer 52
2.2.14. TelnetAnalyzer 54
2.2.15. UDPAnalyzer 55
ÍNDICE DE FIGURAS
Pág.
Fig. 1.1 Acceso directo al “Escaner de Red” 1
Fig. 1.2 Interfaz de ingreso de usario-administrador 1
Fig. 1.3 Clave de usario incorrecta 2
Fig. 2.1 Escaner de Red 2
Fig. 3.1 Pestaña “Sistema” 4
Fig. 4.1 Pestaña “Archivo” 4
Fig. 5.1 Inicia la captura de la trama de red 5
Fig. 5.2 Selección de la tarjeta de red 5
Fig. 6.1 Proceso de capturar la trama de red 6
Fig. 6.2 Finaliiza la captura de la trama de red 7
Fig. 7.1 Pestaña de Detalles 8
Fig. 7.2 Detalle de información del paquete “Capa de Enlace de datos” 9
Fig. 7.3 Detalle de Ethernet “Capa de Enlace de datos” 9
Fig. 7.4 Detalle de IPv4 “Capa de Red” 9
Fig. 7.5 Detalle de IPv6 “Capa de Red” 10
Fig. 7.6 Detalle de ARP/RARP “Capa de Red” 10
Fig. 7.7 Detalle de TCP “Capa de Transporte” 11
Fig. 7.8 Detalle de UDP “Capa de Transporte” 11
Fig. 7.9 Detalle de ICMP “Capa de Transporte” 12
Fig. 7.10 Detalle de HTTP “Capa de Aplicación” 12
Fig. 8.1 Pestaña “Reportes/Estadisticos” 13
Fig. 8.2 Reporte Acumulativo “Reportes/Estadisticos” 13
Fig. 8.3 Reporte Continuo “Reportes/Estadisticos” 13
Fig. 8.4 Reporte Acumulativo 14
Fig. 8.5 Reporte Continuo 14
Fig. 9.1 Ventana de Resolución de Direcciones IP 15
1
MANUAL DE USUARIOESCANER DE RED
1.Ingreso al sistema
Para realizar el ingreso al sistema de “Escaner de Red”, realizamos los
siguientes pasos:
a. Dar doble clic sobre el icono de acceso directo del sistema que se
encuentra en el escritorio de la computadora.
Fig. 1.1 Acceso directo al “Escaner de Red”
b. Después de realizar el paso anterior, aparecerá la pantalla de inicio
de sesión
Fig. 1.2 Interfaz de ingreso de usario-administrador
En esta pantalla se debe ingresar el nombre del usuario y su
contraseña
2
Fig. 1.3 Clave de usario incorrecta
Si la clave del usario y/o contraseña es incorrecta, se presentará el
siguiente mensaje. El administrador solo podra ingresar al sistema
cuando haya ingresado correctamente su clave y la contraseña.
2. Menú Principal
Fig. 2.1 Escaner de Red
3
En esta pantalla encontramos las pestañas de: Sistemas, Archivo, Capturar,
Reportes/Estadisticos, Ayuda y Resolución de Nombres.
Si hacemos clic en Sistema encontraremos las opciones: Nueva Ventana y
Salir.
Si hacemos clic en Archivo encontraremos las opciones: Abrir y Guardar.
Si hacemos clic en Capturar encontraremos las opciones: Inicio y Fin.
Si hacemos clic en Reportes/Estadisticos encontraremos las opciones:
Acumulativo y Continúo, en donde apararecerá para ambas lo siguiente:
Información general, Ratio-Protocolo Capa/red, Ratio-Protocolo
Capa/transporte, Ratio-Protocolo Capa/aplicación y Memoria libre.
Si hacemos clic en Detalles encontraremos las siguientes opciones: Capa de
enlace, Capa de red, Capa de transporte y capa de aplicación.
Si hacemos clic en Ayuda encontraremos las opciones: Acerca de y
referencia.
Si hacemos clic en Resolución de nombres nos muestra una ventana para
el ingreso de la dirección IP.
4
3. Sistema
Al dar click en la pestaña “Sistema” nos mostrará dos opciones:
Nueva Ventana, el administrador podrá visualizar en varias ventanas
el proceso de captura de trama en la red al mismo tiempo.
Salir, permite al administrador salir del sistema.
Fig. 3.1 Pestaña “Sistema”
4. Archivo
Al dar click en la pestaña “Archivo” nos mostrará dos opciones:
Abrir, el administrador podrá abri un archivo existente , previo al
proceso de captura de trama en la red.
Guardar, el administrador podrá guardar la trama, al finalizar el
proceso de capturar paquetes.
Fig. 4.1 Pestaña “Archivo”
5
5. Ingreso al sistema “Escaner de Red”
Para realizar el ingreso al sistema, realizamos los siguientes pasos:
Dar click sobre la pestaña de Capturar y elegir la opcion .
Fig. 5.1 Inicia la captura de la trama de red
Luego aparecerá la siguiente venta:
Fig. 5.2 Selección de la tarjeta de red
En esta ventana podemos seleccionar la tarjeta de red a capturar, bien sea
por LAN o Wireless dependiendo de las tarjetas de red que estén habilitadas
en el computador en donde se instalo el sistema “Escaner de Red”.
Para la captura de los paquetes existe una opcion en donde se podrá elegir
la longitud de la trama de red, en la cual nos proporciona las siguientes
opciones: solo cabeceras, paquetes completos y otros, en donde no puede
ser mayor a l paquete completo.
6
En esta ventana también contiene un “filtro de captura”, es opcional, en la
cual nos permite ver la trama de red que ingresa y sale de una IP específica.
Una vez que el administrador ingreso sus requerimientos para la captura de
las tramas de red, da click al boton , en la cual da inicio proceso o al
boton , para cancelar el proceso.
6. Capturar la trama de red
Fig. 6.1 Proceso de capturar la trama de red
7
En esta ventana podemos visualizar la información del contenido de la trama
de red en detalle. El administrador podrá finalizar este proceso cuando el lo
vea conveniente, haciendo click en “Fin”.
Fig. 6.2 Finaliiza la captura de la trama de red
En la pantalla mostrará tres divisiones, en la parte superior de la
pantalla, el administrador podrá visualizar la información que nos
proporciona el paquete capturado.
En la parte inferior del lado izquierdo de la pantalla nos mostrará la
información de la trama en forma de lista.
8
En la parte inferior del lado derecho de la pantalla nos mostrará la
información de la trama codificada, es decir tal como se captura..
7. Detalles
Una vez que se ha finalizado el proceso de capturar la trama de red, el
administrador puede escoger entre varias opciones que se encuentran en la
pestaña de detalles. Estas opciones estan divididas de acuerdo al modelo de
referencia OSI (Open Systems Interconection), Interconexión de Sistemas
Abiertos.
Fig. 7.1 Pestaña de Detalles
Al darr click en ls pestaña Detalles, se encontrará varias opciones en
donde nos proporciona información del contenido de la trama de la red
que se ha capturado.
El administrador podrá elegir a su criterio y conveniencia la información
que el desea visualizar, de esta manera no se mostrará en la pantalla
datos inecesarios para él.
9
Fig. 7.2 Detalle de información del paquete “Capa de Enlace de datos”
Fig. 7.3 Detalle de Ethernet “Capa de Enlace de datos”
Fig. 7.4 Detalle de IPv4 “Capa de Red”
10
Fig. 7.5 Detalle de IPv6 “Capa de Red”
Fig. 7.6 Detalle de ARP/RARP “Capa de Red”
11
Fig. 7.7 Detalle de TCP “Capa de Transporte”
Fig. 7.8 Detalle de UDP “Capa de Transporte”
12
Fig. 7.9 Detalle de ICMP “Capa de Transporte”
Fig. 7.10 Detalle de HTTP “Capa de Aplicación”
13
8. Reportes / Estadisticos
Al dar click en la pestaña de Reportes/EStadisticos, se mostrará dos
opciones: Acumulativos y Continúo.
Fig. 8.1 Pestaña “Reportes/Estadisticos”
Ambas opciones nos muestran la Información General, Protocolo de
Capa/Red, Protocolo/transporte, Protocolo/Aplicación y la Memoria Libre
Fig. 8.2 Reporte Acumulativo “Reportes/Estadisticos”
Fig. 8.3 Reporte Continuo “Reportes/Estadisticos”
14
El administrador de la red, podrá visualizar los siguientes reportes:
Reportes Acumulativos, en la cual le muestrará los reporte de datos de
todos los paquetes.
Fig. 8.4 Reporte Acumulativo
Reportes Continuo, hace referencia al tiempo en que se está capturando la
trama en la red.
Fig. 8.5 Reporte Continuo
15
9. Extra
En esta ventana podemos averiguar el nombre del equipo ingresando la
dirección IP de l mismo, al dar click en el boton .
Fig. 9.1 Ventana de Resolución de Direcciones IP
16
MANUAL TECNICO
1. Herramientas utilizadas
Para el desarrollo de este sistema, se requieren las herramientas que
permitan capturar y/o enviar paquetes a la red, tal como se describe a
continuación:
1.1. Descripción del Jpcap
Jpcap está basado en libpcap/winpcap y Enchufe Crudo API. Por lo
tanto, Jpcap, como se supone, trabaja sobre cualquier sistema
operativo sobre el cual libpcap/winpcap ha sido puesto en
práctica. Corrientemente, Jpcap ha sido probado sobre FreeBSD 3.x,
Linux RedHat 6.1, el Corazón de Sombrero 4, Solaris, y Microsoft el
Windows 2000/XP.
Jpcap apoya los tipos siguientes de paquetes: Ethernet, IPv4, IPv6,
ARP/RARP, TCP, UDP, y ICMPV4. Otros tipos de paquetes son
capturados como paquetes crudos (p. ej., los casos de la clase de
Paquete) que contiene los datos enteros de los paquetes. Esto
permite a usos Javaneses analizar tipos de paquete inapoyados
17
1.2. Instalación del Jpcap
Si desea instalarlo en Windows 9x, NT, 2000:
1. Transmisión e instalar el Javatm2 Plataforma, Edición Estándar
(J2SEtm) JRE o JDK.
2. La transmisión e instalación del último WinPcap.
3. Transmisión y controlador de Mí Instalador.
4. Siga la instrucción del instalador.
Si usted no quiere usar al instalador, usted también puede instalar a
mano.
1. Trasvase y extraiga el código original Jpcap de la página de
Transmisión.
2. Copie "lib\Jpcap.dll" en " [JRE el directorio] \bin " " [o JRE el
directorio] \lib\ext\x86 "
3. Copie "lib\jpcap.jar" en " [JRE el directorio] \lib\ext "
4. Si usted instalara JDK, usted también tiene que copiar
"lib\jpcap.jar" en " [JDK el directorio] \jre\lib\ext ".
Nota: [JRE es el directorio] es por lo general " C:\Program
Files\Java\j2re*".
[ JDK el directorio] es por lo general " C:\Program Files\Java\jdk * ".
18
1.3. Instalación de Eclipse
1. Ejecutar el paquete Eclipse SDK, versión 3.2.1 y copiarla en el
directorio /usuario/localhost.
2. Ejecutar el paquete en nlpackeg eclipse sdk y copiar la carpeta en
su lugar.
3. Correspondientemente dentro de la carpeta eclipse en el plugings y
features.
4. Una vez realiazada la instalación de Eclipse se crea un icono en el
escritorio para tener un acceso directo.
5. Para ejecutar Eclipse se hace doble click sobre el icono de acceso
directo y se carga la aplicación.
19
2. Codificación del programa
2.1 Clases principales
2.1.1. JDCaptor. Java
package jpsniffer;
import java.io.File;import java.util.Vector;
import javax.swing.JFileChooser;import javax.swing.JOptionPane;
import jpcap.JpcapCaptor;import jpcap.PacketReceiver;import jpcap.JpcapWriter;import jpcap.packet.Packet;import jpcap.packet.TCPPacket;import jpsniffer.stat.JDStatisticsTaker;import jpsniffer.ui.JDCaptureDialog;import jpsniffer.ui.JDContinuousStatFrame;import jpsniffer.ui.JDCumlativeStatFrame;import jpsniffer.ui.JDFrame;import jpsniffer.ui.JDStatFrame;
/****clase que captura la data**/
public class JDCaptor {long MAX_PACKETS_HOLD=10000;
Vector packets = new Vector();
JpcapCaptor jpcap=null;
boolean isLiveCapture;boolean isSaved = false;
20
JDFrame frame;
public void setJDFrame(JDFrame frame){this.frame=frame;
}
public Vector getPackets(){return packets;
}
public void capturePacketsFromDevice() {if(jpcap!=null)
jpcap.close();//obtiene el dispositivo q se eligio para capturarjpcap = JDCaptureDialog.getJpcap(frame);clear();
if (jpcap != null) {isLiveCapture = true;frame.disableCapture();//inicia la captura de la tramastartCaptureThread();
}}
public void loadPacketsFromFile() {isLiveCapture = false;clear();
int ret =JpcapSniffer.chooser.showOpenDialog(frame);
if (ret == JFileChooser.APPROVE_OPTION) {//obtiene la ruta del archivo
String path =JpcapSniffer.chooser.getSelectedFile().getPath
();String filename =JpcapSniffer.chooser.getSelectedFile().getNam
e();
try {if(jpcap!=null){
21
"No se puede abrir el archivo: " +path);
e.printStackTrace();return;
}
frame.disableCapture();
startCaptureThread();}
}
private void clear(){packets.clear();frame.clear();
for(int i=0;i<sframes.size();i++)((JDStatFrame)sframes.get(i)).clear();
}
public void saveToFile() {if (packets == null)
return;
int ret =JpcapSniffer.chooser.showSaveDialog(frame);
if (ret == JFileChooser.APPROVE_OPTION) {File file =
JpcapSniffer.chooser.getSelectedFile();
if (file.exists()) {if (JOptionPane
.showConfirmDialog(frame,
"Sobreescribir " +file.getName() + "?",
"Sobreescribir?",
JOptionPane.YES_NO_OPTION)== JOptionPane.NO_OPTION)
{return;
}
22
writer.writePacket((Packet)packets.elementAt(i));
}
writer.close();isSaved = true;
//JOptionPane.showMessageDialog(frame,file+" wassaved correctly.");
} catch (java.io.IOException e) {e.printStackTrace();JOptionPane.showMessageDialog(
frame,"No se puede guardar el
archivo: " +file.getPath());
}}
}
public void stopCapture() {stopCaptureThread();
}
public void saveIfNot() {if (isLiveCapture && !isSaved) {
int ret =JOptionPane.showConfirmDialog(
null,"Guarda estos datos?","Guarda estos datos?",
JOptionPane.YES_NO_OPTION);if (ret == JOptionPane.YES_OPTION)
saveToFile();}
}
Vector sframes=new Vector();public void addCumulativeStatFrame(JDStatisticsTaker
taker) {
23
}
public void closeAllWindows(){for(int i=0;i<sframes.size();i++)
((JDStatFrame)sframes.get(i)).dispose();}
private Thread captureThread;//proceso de capturar la trama
private void startCaptureThread() {if (captureThread != null)
return;
captureThread = new Thread(new Runnable(){//body of capture threadpublic void run() {
while (captureThread != null) {if (jpcap.processPacket(1,
handler) == 0&& !isLiveCapture)
stopCaptureThread();Thread.yield();
}
jpcap.breakLoop();//jpcap = null;frame.enableCapture();
}});captureThread.setPriority(Thread.MIN_PRIORITY);
frame.startUpdating();for(int i=0;i<sframes.size();i++){
((JDStatFrame)sframes.get(i)).startUpdating();}
captureThread.start();}
24
}}
private PacketReceiver handler=new PacketReceiver(){public void receivePacket(Packet packet) {
packets.addElement(packet);
/* System.out.println("paquete"+packet.getClass());
System.out.println("paquete header"+packet);
//TCPPacket tcpp = (TCPPacket)packet;System.err.println("paquete antes de");System.err.println("paquete
"+packet.data.length);System.err.println("paquete despues de
de");*/
while (packets.size() >MAX_PACKETS_HOLD) {
packets.removeElementAt(0);}if (!sframes.isEmpty()) {
for (int i = 0; i < sframes.size();i++)
((JDStatFrame)sframes.get(i)).addPacket(packet);}isSaved = false;
}};
}
25
2.1.2. JpcapSniffer. Java
package jpsniffer;import java.util.*;import java.io.*;import javax.swing.JOptionPane;import jpsniffer.ui.JDFrame;
public class JpcapSniffer{
public static Properties JDProperty;
public static javax.swing.JFileChooser chooser=newjavax.swing.JFileChooser();
static Vector frames=new Vector();
public JpcapSniffer(){
/* try{Class
c=Class.forName("jpcap.JpcapCaptor");}catch(ClassNotFoundException e){
JOptionPane.showMessageDialog(null,"Jpcapno esta
instalado. por favor descargue e instale paraejecutar la
aplicación.");System.exit(0);
}
JDPacketAnalyzerLoader.loadDefaultAnalyzer();//carga la parte grafica de los reportes//JDStatisticsTakerLoader.loadStatisticsTaker();loadProperty();
openNewWindow();*/ }
public static void main(String[] args){try{
26
JDPacketAnalyzerLoader.loadDefaultAnalyzer();//carga la parte grafica de los reportesJDStatisticsTakerLoader.loadStatisticsTaker();loadProperty();
//openNewWindow();
}
public static void saveProperty(){if(JDProperty==null) return;try{
JDProperty.store((OutputStream)newFileOutputStream("JpcapSniffer.property"),"Jp
capSniffer");
}catch(IOException e){}catch(ClassCastException e){}
}
static void loadProperty(){try{
JDProperty=new Properties();JDProperty.load((InputStream)newFileInputStream("JpcapSniffer.property"));
}catch(IOException e){}
}
public static void openNewWindow(){JDCaptor captor=new JDCaptor();//instancio el
objeto para capturarlos paquetes
frames.add(JDFrame.openNewWindow(captor));}
public static void closeWindow(JDFrame frame){frame.captor.stopCapture();//detiene el proceso
nde capturaframe.captor.saveIfNot();
27
System.exit(0);}
}
protected void finalize() throws Throwable{saveProperty();
}}
28
2.1.3. JDPacketAnalyzerLoader
package jpsniffer;import java.util.*;import jpsniffer.analyzer.*;
public class JDPacketAnalyzerLoader{
static Vector analyzers=new Vector();static void loadDefaultAnalyzer(){
analyzers.addElement(new PacketAnalyzer());analyzers.addElement(new EthernetAnalyzer());analyzers.addElement(new IPv4Analyzer());analyzers.addElement(new IPv6Analyzer());analyzers.addElement(new TCPAnalyzer());analyzers.addElement(new UDPAnalyzer());analyzers.addElement(new ICMPAnalyzer());analyzers.addElement(new HTTPAnalyzer());analyzers.addElement(new FTPAnalyzer());analyzers.addElement(new TelnetAnalyzer());analyzers.addElement(new SSHAnalyzer());analyzers.addElement(new SMTPAnalyzer());analyzers.addElement(new POP3Analyzer());analyzers.addElement(new ARPAnalyzer());
}
public static JDPacketAnalyzer[] getAnalyzers(){JDPacketAnalyzer[] array=new
JDPacketAnalyzer[analyzers.size()];
for(int i=0;i<array.length;i++)
array[i]=(JDPacketAnalyzer)analyzers.elementAt(i);
return array;}public static JDPacketAnalyzer[] getAnalyzersOf(int
layer){Vector v=new Vector();
for(int i=0;i<analyzers.size();i++)
if(((JDPacketAnalyzer)analyzers.elementAt(i)).layer==lay
29
2.1.4. JDStatisticsTakerLoader
package jpsniffer;import java.util.*;
import jpsniffer.stat.ApplicationProtocolStat;import jpsniffer.stat.FreeMemStat;import jpsniffer.stat.JDStatisticsTaker;import jpsniffer.stat.NetworkProtocolStat;import jpsniffer.stat.PacketStat;import jpsniffer.stat.TransportProtocolStat;
public class JDStatisticsTakerLoader{
static Vector stakers=new Vector();
static void loadStatisticsTaker(){stakers.addElement(new PacketStat());stakers.addElement(new NetworkProtocolStat());stakers.addElement(new TransportProtocolStat());stakers.addElement(new ApplicationProtocolStat());stakers.addElement(new FreeMemStat());
}
public static JDStatisticsTaker[] getStatisticsTakers(){JDStatisticsTaker[] array=new
JDStatisticsTaker[stakers.size()];
for(int i=0;i<array.length;i++)
array[i]=(JDStatisticsTaker)stakers.elementAt(i);
return array;}
public static JDStatisticsTaker getStatisticsTakerAt(intindex){
return (JDStatisticsTaker)stakers.get(index);}
}
30
2.2 Clases de los protocolos
2.2.1. ARPAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class ARPAnalyzer extends JDPacketAnalyzer{
private static final String[] valueNames={"Tipo Hardware","Tipo/Protocol","Longitud/Dir. HW","Longitud/Dir. de Protocolo","Operacion","Dir./ HW emisor","Dir./ Protocolo emisor","Dir./ HW destino","Dir./ Protocolo destino"
};private ARPPacket arp;
public ARPAnalyzer(){layer=NETWORK_LAYER;
}
public boolean isAnalyzable(Packet p){return (p instanceof ARPPacket);
}
public String getProtocolName(){return "ARP/RARP";
}
public String[] getValueNames(){return valueNames;
}
public void analyze(Packet p){if(!isAnalyzable(p)) return;arp=(ARPPacket)p;
}
31
return getValueAt(i);
return null;}
Object getValueAt(int index){switch(index){
case 0:switch(arp.hardtype){
case ARPPacket.HARDTYPE_ETHER:return
"Ethernet ("+arp.hardtype+")";case ARPPacket.HARDTYPE_IEEE802:return
"Token ring("+arp.hardtype+")";case
ARPPacket.HARDTYPE_FRAMERELAY: return"Frame relay
("+arp.hardtype+")";default: return new
Integer(arp.hardtype);}case 1:switch(arp.prototype){
case ARPPacket.PROTOTYPE_IP:return "IP
("+arp.prototype+")";default: return new
Integer(arp.prototype);}case 2: return new Integer(arp.hlen);case 3: return new Integer(arp.plen);case 4:switch(arp.operation){
case ARPPacket.ARP_REQUEST:return "ARP
Request";case ARPPacket.ARP_REPLY: return
"ARP Reply";case ARPPacket.RARP_REQUEST:
return "Reverse
32
public Object[] getValues(){Object[] v=new Object[valueNames.length];for(int i=0;i<valueNames.length;i++)
v[i]=getValueAt(i);
return v;}
}
33
2.2.2. EthernetAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class EthernetAnalyzer extends JDPacketAnalyzer{
private static final String[] valueNames={"Tipo/Frame","MAC Fuente","MAC Destino"
};private EthernetPacket eth;
public EthernetAnalyzer(){layer=DATALINK_LAYER;
}
public boolean isAnalyzable(Packet p){return (p.datalink!=null && p.datalink instanceof
EthernetPacket);}
public String getProtocolName(){return "Ethernet Frame";
}
public String[] getValueNames(){return valueNames;
}
public void analyze(Packet p){if(!isAnalyzable(p)) return;eth=(EthernetPacket)p.datalink;
}
public Object getValue(String valueName){for(int i=0;i<valueNames.length;i++)
if(valueNames[i].equals(valueName))return getValueAt(i);
return null;}
34
Object getValueAt(int index){switch(index){case 0: return new Integer(eth.frametype);case 1: return eth.getSourceAddress();case 2: return eth.getDestinationAddress();default: return null;}
}
public Object[] getValues(){Object[] v=new Object[3];for(int i=0;i<3;i++)
v[i]=getValueAt(i);
return v;}
}
35
2.2.3. FTPAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class FTPAnalyzer extends JDPacketAnalyzer{
public FTPAnalyzer(){layer=APPLICATION_LAYER;
}
public boolean isAnalyzable(Packet p){if(p instanceof TCPPacket &&
(((TCPPacket)p).src_port==20 ||((TCPPacket)p).dst_port==20 ||
((TCPPacket)p).src_port==21 ||((TCPPacket)p).dst_port==21))
return true;else return false;
}
public String getProtocolName(){return "FTP";
}
public String[] getValueNames(){return null;}
public void analyze(Packet p){}
public Object getValue(String s){ return null; }public Object getValueAt(int i){ return null; }public Object[] getValues(){ return null; }
}
36
2.2.4. HTTPAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;import java.util.*;import java.io.*;
public class HTTPAnalyzer extends JDPacketAnalyzer{
private static final String[] valueNames={"Metodo","Cabecera"
};String method;Vector headers=new Vector();
public HTTPAnalyzer(){layer=APPLICATION_LAYER;
}
public boolean isAnalyzable(Packet p){if(p instanceof TCPPacket &&
(((TCPPacket)p).src_port==80 ||((TCPPacket)p).dst_port==80))return true;
else return false;}
public String getProtocolName(){return "HTTP";
}
public String[] getValueNames(){return valueNames;
}
public void analyze(Packet p){method="";headers.removeAllElements();if(!isAnalyzable(p)) return;
try{BufferedReader in=new BufferedReader(new
37
if(method==null ||method.indexOf("HTTP")==-1){
// this packet doesn't contain HTTPheader
method="No cabecera HTTP";return;
}
String l;//read headerswhile((l=in.readLine()).length()>0)
headers.addElement(l);}catch(IOException e){}
}
public Object getValue(String valueName){if(valueNames[0].equals(valueName)) return
method;if(valueNames[1].equals(valueName)) return
headers;return null;
}
Object getValueAt(int index){if(index==0) return method;if(index==1) return headers;return null;
}
public Object[] getValues(){Object[] values=new Object[2];values[0]=method;values[1]=headers;
return values;}
}
38
2.2.5. ICMPAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;import java.util.*;
public class ICMPAnalyzer extends JDPacketAnalyzer{
private static final String[] valueNames={"Tipo","Code","ID","Secuencia","Redireccion/Dirección","Dirección/Mascara","Timestamp Original","Timestamp Recibido","Transmision Timestamp"
};
private static final String[] typeNames={"Echo Reply(0)","Unknown(1)","Unknown(2)","Destination Unreachable(3)","Source Quench(4)","Redirect(5)","Unknown(6)","Unknown(7)","Echo(8)","Unknown(9)","Unknown(10)","Time Exceeded(11)","Parameter Problem(12)","Timestamp(13)","Timestamp Reply(14)","Unknown(15)","Unknown(16)","Address Mask Request(17)","Address Mask Reply(18)"
};
private Hashtable values=new Hashtable();
39
public boolean isAnalyzable(Packet p){return (p instanceof ICMPPacket);
}
public String getProtocolName(){return "ICMP";
}
public String[] getValueNames(){return valueNames;
}
public void analyze(Packet p){if(!isAnalyzable(p)) return;values.clear();
ICMPPacket icmp=(ICMPPacket)p;if(icmp.type>=typeNames.length){
values.put(valueNames[0],String.valueOf(icmp.type));}else{
values.put(valueNames[0],typeNames[icmp.type]);}values.put(valueNames[1],new
Integer(icmp.code));
if(icmp.type==0 || icmp.type==8 ||(icmp.type>=13 &&
icmp.type<=18)){values.put(valueNames[2],new
Integer(icmp.id));values.put(valueNames[3],new
Integer(icmp.seq));}
if(icmp.type==5)values.put(valueNames[4],icmp.redir_ip);
if(icmp.type==17 || icmp.type==18)
values.put(valueNames[5],(icmp.subnetmask>>12)+"."+
40
Long(icmp.trans_timestamp));}
}
public Object getValue(String valueName){return values.get(valueName);
}
public Object getValueAt(int index){if(index<0 || index>=valueNames.length) return
null;return values.get(valueNames[index]);
}
public Object[] getValues(){Object[] v=new Object[valueNames.length];
for(int i=0;i<valueNames.length;i++)v[i]=values.get(valueNames[i]);
return v;}
}
41
2.2.6. IPv4Analyzer
package jpsniffer.analyzer;import jpcap.packet.*;import java.net.InetAddress;import java.net.UnknownHostException;import java.util.*;
public class IPv4Analyzer extends JDPacketAnalyzer{
private static final String[] valueNames={"Version","TOS: Prioridad","TOS: Throughput","TOS: Confiabilidad","Longitud","Identificación","Fragment: No fragmentado","Fragment: Fragmentado","Fragment Offset","Tiempo de vida","Protocolo","IP Fuente","IP Destino",
// "Nom.Equi. Fuente",// "Nom.Equi. Destino"
};private Hashtable values=new Hashtable();
public IPv4Analyzer(){layer=NETWORK_LAYER;
}
public boolean isAnalyzable(Packet p){if(p instanceof IPPacket &&
((IPPacket)p).version==4) return true;else return false;
}
public String getProtocolName(){return "IPv4";
}
42
public void analyze(Packet packet) throwsUnknownHostException{
values.clear();if(!isAnalyzable(packet)) return;IPPacket ip=(IPPacket)packet;
values.put(valueNames[0],new Integer(4));values.put(valueNames[1],new Integer(ip.priority));values.put(valueNames[2],new
Boolean(ip.t_flag));values.put(valueNames[3],new
Boolean(ip.r_flag));values.put(valueNames[4],new Integer(ip.length));values.put(valueNames[5],new Integer(ip.ident));values.put(valueNames[6],new
Boolean(ip.dont_frag));values.put(valueNames[7],new
Boolean(ip.more_frag));values.put(valueNames[8],new Integer(ip.offset));values.put(valueNames[9],new
Integer(ip.hop_limit));values.put(valueNames[10],new
Integer(ip.protocol));
values.put(valueNames[11],ip.src_ip.getHostAddress());
values.put(valueNames[12],ip.dst_ip.getHostAddress());//InetAddress addres =
InetAddress.getByName(ip);// byte[] bytes = ip.src_ip.getAddress();
// ip.src_ip = ip.src_ip.getByAddress(bytes);// Get the host name// String hostname = addres.getHostName();
//values.put(valueNames[13],ip.src_ip.getHostName());
//values.put(valueNames[14],ip.dst_ip.getHostName());
}
public Object getValue(String valueName){/*if((valueNames[13].equals(valueName) &&
values.get(valueName) instanceofInetAddress) ||
43
values.put(valueNames[index],((InetAddress)values.get(valueNames[index])).
getHostName());}
return values.get(valueNames[index]);}
public Object[] getValues(){Object[] v=new Object[valueNames.length];
for(int i=0;i<valueNames.length;i++)v[i]=getValueAt(i);
return v;}
}
44
2.2.7. IPv6Analyzer
package jpsniffer.analyzer;import jpcap.packet.*;import java.util.*;
public class IPv6Analyzer extends JDPacketAnalyzer{
private static final String[] valueNames={"Version","Clase","Flow Label","Longitud","Protocolo","Limite / Salto","IP Fuente","IP Destino"//,//"Source Host Name",//"Destination Host Name"};
Hashtable values=new Hashtable();
public IPv6Analyzer(){layer=NETWORK_LAYER;
}
public boolean isAnalyzable(Packet p){if(p instanceof IPPacket &&
((IPPacket)p).version==6) return true;else return false;
}
public String getProtocolName(){return "IPv6";
}
public String[] getValueNames(){return valueNames;
}
public void analyze(Packet packet){values.clear();
45
values.put(valueNames[2],newInteger(ip.flow_label));
values.put(valueNames[3],new Integer(ip.length));values.put(valueNames[4],new
Integer(ip.protocol));values.put(valueNames[5],new
Integer(ip.hop_limit));
values.put(valueNames[6],ip.src_ip.getHostAddress());
values.put(valueNames[7],ip.dst_ip.getHostAddress());
//values.put(valueNames[8],ip.src_ip.getHostName());
//values.put(valueNames[9],ip.dst_ip.getHostName());}
public Object getValue(String valueName){return values.get(valueName);
}
Object getValueAt(int index){if(index<0 || index>=valueNames.length) return
null;return values.get(valueNames[index]);
}
public Object[] getValues(){Object[] v=new Object[valueNames.length];
for(int i=0;i<valueNames.length;i++)v[i]=values.get(valueNames[i]);
return v;}
}
46
2.2.8. JDPacketAnalyzer
package jpsniffer.analyzer;import java.net.UnknownHostException;
import jpcap.packet.*;
public abstract class JDPacketAnalyzer{
public int layer=DATALINK_LAYER;public static int DATALINK_LAYER=0;public static int NETWORK_LAYER=1;public static int TRANSPORT_LAYER=2;public static int APPLICATION_LAYER=3;
public abstract boolean isAnalyzable(Packet packet);public abstract void analyze(Packet packet) throws
UnknownHostException;public abstract String getProtocolName();public abstract String[] getValueNames();public abstract Object getValue(String valueName);abstract Object getValueAt(int index);public abstract Object[] getValues();
}
47
2.2.9. PacketAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class PacketAnalyzer extends JDPacketAnalyzer{
private static final String[]valueNames={"Tiempo/captura","Longitud/Captura"};private Packet packet;
public boolean isAnalyzable(Packet packet){return true;
}
public String getProtocolName(){return "Información/Paquete";
}
public String[] getValueNames(){return valueNames;
}
public void analyze(Packet p){packet=p;
}
public Object getValue(String name){if(name.equals(valueNames[0]))
return new java.util.Date (packet.sec*1000+packet.usec/1000).toString();
else if(name.equals(valueNames[1]))return new Integer(packet.caplen);
else return null;}
Object getValueAt(int index){switch(index){
case 0: return newjava.util.Date(packet.sec*1000+
packet.usec/1000).toString();case 1: return new Integer(packet.caplen);default: return null;
48
public Object[] getValues(){Object[] v=new Object[2];v[0]=new java.util.Date (packet.sec*1000+
packet.usec/1000).toString();
v[1]=new Integer(packet.caplen);
return v;}
}
49
2.2.10. POP3Analyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class POP3Analyzer extends JDPacketAnalyzer{
public POP3Analyzer(){layer=APPLICATION_LAYER;
}
public boolean isAnalyzable(Packet p){if(p instanceof TCPPacket &&
(((TCPPacket)p).src_port==110 ||((TCPPacket)p).
dst_port==110))return true;
else return false;}
public String getProtocolName(){return "POP3";
}
public String[] getValueNames(){return null;}
public void analyze(Packet p){}
public Object getValue(String s){ return null; }public Object getValueAt(int i){ return null; }public Object[] getValues(){ return null; }
}
50
2.2.11. SMTPAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class SMTPAnalyzer extends JDPacketAnalyzer{
public SMTPAnalyzer(){layer=APPLICATION_LAYER;
}
public boolean isAnalyzable(Packet p){if(p instanceof TCPPacket &&
(((TCPPacket)p).src_port==25 ||((TCPPacket)p)
.dst_port==25))return true;
else return false;}
public String getProtocolName(){return "SMTP";
}
public String[] getValueNames(){return null;}
public void analyze(Packet p){}
public Object getValue(String s){ return null; }public Object getValueAt(int i){ return null; }public Object[] getValues(){ return null; }
}
51
2.2.12. SSHAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class SSHAnalyzer extends JDPacketAnalyzer{
public SSHAnalyzer(){layer=APPLICATION_LAYER;
}
public boolean isAnalyzable(Packet p){if(p instanceof TCPPacket &&
(((TCPPacket)p).src_port==22 ||((TCPPacket)p).dst_port==22))
return true;else return false;
}
public String getProtocolName(){return "SSH";
}
public String[] getValueNames(){return null;}
public void analyze(Packet p){}
public Object getValue(String s){ return null; }public Object getValueAt(int i){ return null; }public Object[] getValues(){ return null; }
}
52
2.2.13. TCPAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;import java.util.*;
public class TCPAnalyzer extends JDPacketAnalyzer{
private static final String[] valueNames={"Puerto Fuente","Puerto Destino","Número/Secuencia","Numero/Ack","URG Flag","ACK Flag","PSH Flag","RST Flag","SYN Flag","FIN Flag","Tamaño/Ventana"};
Hashtable values=new Hashtable();
public TCPAnalyzer(){layer=TRANSPORT_LAYER;
}
public boolean isAnalyzable(Packet p){return (p instanceof TCPPacket);
}
public String getProtocolName(){return "TCP";
}
public String[] getValueNames(){return valueNames;
}
public void analyze(Packet p){values.clear();if(!isAnalyzable(p)) return;TCPPacket tcp=(TCPPacket)p;values.put(valueNames[0],new
53
values.put(valueNames[4],new Boolean(tcp.urg));values.put(valueNames[5],new Boolean(tcp.ack));values.put(valueNames[6],new Boolean(tcp.psh));values.put(valueNames[7],new Boolean(tcp.rst));values.put(valueNames[8],new Boolean(tcp.syn));values.put(valueNames[9],new Boolean(tcp.fin));values.put(valueNames[10],new
Integer(tcp.window));}
public Object getValue(String valueName){return values.get(valueName);
}
Object getValueAt(int index){if(index<0 || index>=valueNames.length) return
null;return values.get(valueNames[index]);
}
public Object[] getValues(){Object[] v=new Object[valueNames.length];
for(int i=0;i<valueNames.length;i++)v[i]=values.get(valueNames[i]);
return v;}
}
54
2.2.14. TelnetAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class TelnetAnalyzer extends JDPacketAnalyzer{
public TelnetAnalyzer(){layer=APPLICATION_LAYER;
}
public boolean isAnalyzable(Packet p){if(p instanceof TCPPacket &&
(((TCPPacket)p).src_port==23 ||((TCPPacket)p).
dst_port==23))return true;
else return false;}
public String getProtocolName(){return "Telnet";
}
public String[] getValueNames(){return null;}
public void analyze(Packet p){}
public Object getValue(String s){ return null; }public Object getValueAt(int i){ return null; }public Object[] getValues(){ return null; }
}
55
2.2.15. UDPAnalyzer
package jpsniffer.analyzer;import jpcap.packet.*;
public class UDPAnalyzer extends JDPacketAnalyzer{
private static final String[] valueNames={"Puerto Fuente","Puerto Destino","Longitud/Paquete"
};private UDPPacket udp;
public UDPAnalyzer(){layer=TRANSPORT_LAYER;
}
public boolean isAnalyzable(Packet p){return (p instanceof UDPPacket);
}
public String getProtocolName(){return "UDP";
}
public String[] getValueNames(){return valueNames;
}
public void analyze(Packet p){if(!isAnalyzable(p)) return;udp=(UDPPacket)p;
}
public Object getValue(String valueName){for(int i=0;i<valueNames.length;i++)
if(valueNames[i].equals(valueName))return getValueAt(i);
return null;}
56
case 1: return new Integer(udp.dst_port);case 2: return new Integer(udp.length);default: return null;
}}
public Object[] getValues(){Object[] v=new Object[3];for(int i=0;i<3;i++)
v[i]=getValueAt(i);
return v;}
}