PKNLZR: Analizador estadístico de redes de área local.


¿qué es esto?
Esto es un proyecto realizado hace tiempo consistente en un programa para MS-DOS que, ejecutado en un nodo de una red Ethernet, realiza una "escucha" continua del bus y realiza estadísticas relativas al funcionamiento de la misma: ocupación del medio, tipo de paquetes que circulan por la red, número de estaciones activas en la red en cada momento, etc.


¿cómo funciona?
El programa se engancha a un driver instalado previamente (el Packet Driver) y lee cada paquete que circula por la red. Los paquetes leídos por el programa (que son todos los que circulan por la red) no son destruídos sino que, al tratarse de un bus, llegan a su destino, sin que el programa interfiera el normal funcionamiento de la red.


¿qué es un Packet Driver?
Es un driver para MS-DOS que viene acompañando a algunas tarjetas de red y que permite acceder a las funciones de más bajo nivel de la tarjeta. En concreto, para este proyecto se utilizó la capacidad de este driver de leer una trama Ethernet sin realizar ningún tipo de procesamiento del mismo, a ningún nivel.


¿puedo conseguir este programa?
Si se ve con ánimo de instalar el programa y conseguir que funcione en su red, puede enviarme un e-mail y, gustosamente, le enviaré una copia del programa. Por supuesto, junto al programa no va implícita ninguna garantía de que el programa funcione con su red, tarjeta, packet-driver.


Participaron en el proyecto:

  • Alberto Mateos
  • Patxi Picaza
  • Javi Tobal (yo mismo)
  • Aitor Valgañón

  • Documentación básica sobre el PKNLZR

    INTRODUCCIÓN

    Se trata en este proyecto de realizar un analizador estadístico de protocolos de redes de area local. Las funciones a desempeñar por analizador comprenden:
  • Mostrar el número de tramas circulantes en la red.
  • Determinar el protocolo utilizado por las tramas.
  • Calcular la carga de la red en bytes/seg.
  • Mostrar el número de tramas broadcast que circulan por la red.
  • Determinar el número de estaciones activas en la red.
  • Monitorizar avisos de inactividad de servidores.
  • Dicho analizador está basado en el Packet Driver (software de FTP).
    La especificación packet driver provee de un simple interface programable que permite a varias aplicaciones compartir un único interface de red a nivel enlace de datos (nivel 2 de OSI).
    El propósito de la especificación es hacer que el tratamiento de la tarjeta de red sea independiente del modelo de tarjeta que se esté utilizando (independencia del fabricante), no obstante no provee de independencia en cuanto al nivel físico por lo que el driver dependerá del modelo utilizado a este nivel, esto es, el packet driver es dependiente de la tarjeta utilizada; en concreto el usado para el desarrollo del analizador corresponde al de las tarjetas SMC de Western Digital 8003PKDR.EXE . Gracias al driver, el analizador funcionaría igual para las tarjetas token ring siempre que se disponga del driver correspondiente, disponibles por otra parte en dominio público.
    PACKET DRIVER
    El packet driver es invocado vía interrupciones software, queda cargado en un vector de interrupciones entre el 0x60 y el 0x80. Aunque se puede obligar a que se cargue en un vector concreto, esto no es aconsejable porque pueden surgir conflictos con las interrupciones. Para localizar el vector de interrupciones en el que se ha cargado el packet driver se ha de localizar los caracteres (texto ASCII) "PKT DRVR" después de tres bytes de código (una instrucción de salto) entre los vectores 0x60 y 0x 80.
    Utilizando las funciones proporcionadas por la interrupción que habilita el packet driver podremos iniciar el acceso a un tipo de específico de paquete, liberar el acceso a él, enviar un paquete, interrogarle sobre ciertas estadísticas, ...
    La especificación packet driver describe varios tipos de drivers, el primero es el packet driver básico, que proporciona funciones mínimas como son operaciones de broadcast y de recepción de paquetes. El segundo driver es tipo extendido, que además de las funciones del tipo básico, proporciona funciones menos comúnmente usadas como multicast y estadísticas del interface. El tercer y último tipo (alto rendimiento) soporta mejoras de prestaciones.
    IDENTIFICACIÓN DE INTERFACES DE RED
    Los interfaces de red son identificados por tres enteros, . La clase hace referencia al tipo de medio que el interface soporta: DIX (bluebook) ethernet, IEEE 802.3 ethernet, IEEE 802.5, proNET-10, Appletalk, ...
    El segundo de los enteros es el tipo particular de interface dentro de la clase: Los de ethernet pueden ser 3Com, 3C503 o 3C505, Univation, BICC de ISOLAN, ... Los de 802.5 pueden ser IBM token ring adapter, Proteon,...
    Y por último, el número identifica a un interface de una máquina que tenga dos interfaces del mismo tipo y clase.
    El packet driver del que disponemos está diseñado para su funcionamiento en redes ethernet, concretamente tiene clase 1 (ethernet), tipo 14 (Western digital WD8003).

    DEMULTIPLEXACIÓN DE NIVEL DE ENLACE
    Ethernet es el método de organización más comúnmente usado hasta la fecha. Las aplicaciones diseñadas para comunicarse a través de ethernet, incluían drivers para una tarjetas concretas.
    Esto significa que cada aplicación se apropia de la tarjeta y ésta no puede ser usada simultáneamente por varias aplicaciones.
    La solución a este problema viene dada por el packet driver, un software que se apropia de la tarjeta y que proporciona un interface standard para ser usado por todas las aplicaciones. De este manera las aplicaciones podrán indicar al packet driver que tipo de paquetes quieren recibir y en que dirección debe depositarlos.
    Se debe definir un mecanismo que permita decidir a que tipo de protocolo pertenece un paquete, en caso de un mismo medio físico sea utilizado por diferentes protocolos de transporte (TCP/IP, IPX, ...). En ethernet tipo 2 (DIX), este mecanismo se vale del campo tipo de dos bytes que viene inmediatamente después de los campos de dirección destino y fuente (de 6 bytes cada uno). Sin embargo en IEEE 802.3 ese campo es utilizado para indicar la longitud del campo de información de nivel superior.
    La función access_type() permitirá la demultiplexación del nivel enlace de datos. Cada llamada a esta función establece acceso a un tipo de trama,proporcionando un handle (un número entero) por cada tipo de MAC, está conexión permanecerá hasta que sea liberada mediante la llamada a la función release_type().
    PROGRAMANDO EL INTERFACE
    A las funciones se accede vía interrupciones software, para lo que previamente se ha tenido que dejar en AH el código de la función deseada.
    A continuación vamos a estudiar todas las funciones que se utilizan a lo largo del proyecto, especificando para cada una de ellas los valores que han de tomar los registros en las llamadas así como los valores devueltos por ellas:
    *** Documentación incompleta: Disponible vía e-mail ***



    Guía de usuario del PKZ
    El PKZ se compone de los siguientes ficheros:
    - PKZ.EXE el programa en sí.
    - PKZ.DOC esta documentación.
    - PKZ.LOG un fichero de registro de ejecuciones.
    - TEKEL.NDF ejemplo de fichero de definición de nodos.
    Además de estos ficheros el programa necesita que esté presente en el sistema un Packet Driver para la tarjeta de red. El Packet Driver deberá estar residente. Es posible que si está en memoria algún otro programa residente que acceda a la tarjeta (por ejemplo, IPX) el Packet Driver tenga deshabilitadas algunas funciones necesarias para ejecutar el PKZ.




    Autor:Javi Tobal
    Página personal:http://www.arrakis.es/~tobal/
    Última actualización: Domingo, 3 de noviembre de 1996
    (Los comentarios son bien recibidos)