ESCUELA POLITÉCNICA NACIONA L
Transcript of ESCUELA POLITÉCNICA NACIONA L
ESCUELA POLITÉCNICA NACIONAL
ESCUELA DE INGENIERÍA
MONITOREO DE DISPOSITIVOS CONFIGURADOS CONTCP / IP
PROYECTO PREVIO A LA OBTENCIÓN DEL TITULO DE INGENIEROESPECIALISTA EN ELECTRÓNICA Y TELECOMUNICACIONES
MARCELO RICARDO FILIAN NARVÁEZ
DIRECTOR: Msc. Carlos Egas
Quito, Mayo del 2002
DECLARACIÓN
Yo Marcelo Ricardo Filian Narváez, declaro que el trabajo aquí descrito es de mi
autoría; que no ha sido previamente presentada para ningún grado o calificación
profesional; y, que he consultado las referencias bibliográficas que se incluyen en
este documento.
La Escuela Politécnica Nacional, puede hacer uso de los derechos
correspondientes a este trabajo, según lo establecido por la Ley, Reglamento de
Propiedad Intelectual y por la normatividad institucional vigente.
Marcelo Ricardo Filian Narváez
CERTIFICACIÓN
Certifico que el presente trabajo fue desarrollado por Marcelo Ricardo Filian
Narváez, bajo mi supervisión.
MSC. CARLOS EGAS
DIRECTOR DE PROYECTO
AGRADECIMIENTOS
¡ A Dios, a la Madre Dolorosa, a mis padres, a mi esposa, a todos mis familiares y
\s que me dieron el apoyo necesario para culminar esta Carrera.
DEDICATORIA
A tí, Britney Marcela, luz de mi vida.
CONTENIDO
CAPÍTULO 1
FUNDAMENTOS TEÓRICOS
1.1 REDES DE ÁREA LOCAL 11.1.1 DEFINICIÓN 11.2 TIPOS DE REDES 11.2.1 INTRODUCCIÓN 11.2.2 RED TIPO ESTRELLA 31.2.3 RED TIPO BUS 41.2.4 RED TIPO ANILLO 51.3 PROTOCOLO DE RED TCP/IP 61.3.1 PROTOCOLOS DE RED 61.3.2 CAPAS CONCEPTUALES DEL SOFTWARE DE
PROTOCOLO 81.3.3 FUNCIONALIDAD DE LAS CAPAS 101.3.4 MODELO DE REFERENCIA OSI 111.3.5 MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP
DE INTERNET 121.3.5.1 CAPA INTERFAZ DE RED 131.3.5.2 CAPA DE INTERNET 131.3.5.3 CAPA DE TRANSPORTE 151.3.5.4 CAPA DE APLICACIÓN 151.3.6 PRINCIPIO DE ESTRATIFICACIÓN POR CAPAS DE
PROTOCOLOS 161.3.7 FRONTERAS IMPORTANTES EN EL MODELO TCP/IP 171.3.7.1 FRONTERA DE DIRECCIÓN DE PROTOCOLO DE ALTO
NIVEL 171.3.7.2 FRONTERA DE SISTEMA OPERATIVO 181.4 ENCAPSULAMIENTO DE DATOS 181.4.1 DATAGRAMA IP 201.4.2 PAQUETE IP 211.4.3 ESTRUCTURA DE UN DATAGRAMA IP 211.4.4 ENCABEZADO IP 221.4.4.1 LONGITUD DE LA CABECERA 221.4.4.2 VERSIÓN 231.4.4.3 TIPO DE SERVICIO 231.4.4.4 LONGITUD TOTAL 231.4.4.5 IDENTIFICACIÓN 231.4.4.6 FRAGMENTOS OFFSET 241.4.4.7 FLAGS 24
1 4.4.8 TIEMPO DE VIDA 241.4.4.9 PROTOCOLO 251 4.4.10 CHEKSUM 251.4.4.11 DIRECCIÓN DE ORIGEN. 251.4.4.12 DIRECCIÓN DE DESTINO 251.4.4.13 OPCIONES 261.4.4.14 DATOS 271.4.4.14 PADDING 281.4.5 DIRECCIONES IP 281.4.5.1 CLASES DE DIRECCIONES IP 281.4.5.1.1 DIRECCIÓN IP CLASE A 281.4.5.1.2 DIRECCIÓN IP CLASE B 281.4.5.1.3 DIRECCIÓN IP CLASE C 291.4.5.1.4 DIRECCIÓN IP CLASE D 291.4.5.1.5 DIRECCIÓN IP CLASE E 291.4.5.2 IP (INTERNET PROTOCOL ) VERSIÓN 6 291.4.5.2.1 FORMATO DE CABECERA 291.4.5.2.2 DIRECCIÓN IP VERSIÓN 6 311.5 PROTOCOLO DE MENSAJES DE INTERNET 321.5.1 INTRODUCCIÓN 321.5.2 PROTOCOLO ICMP 331.5.3 REPORTE DE ERRORES 341.5.4 ENTREGA DE MENSAJES ICMP 341.5.5 FORMATO DE MENSAJES ICMP 351.5.6 SOLICITUD DE RESPUESTA DE ECO - PING 381.6 INTERFACE DE PROGRAMA DE APLICACIÓN (API)
WINDOWS SpCKETS 391.6.1 PROCESO BÁSICO DE CONEXIÓN DE UN SOCKET 391.6.2 INTRODUCCIÓN A WINSOCK 411.6.3 DEFINICIÓN DE SOCKET 441.6.4 ESTRUCTURA SIMPLE DE DATOS DE UN SOCKET 451.6.5 CONFIGURACIÓN DE UN SOCKET 461.6.6 CONEXIÓN DE UN SOCKET 471.6.7 TRANSMISIÓN DE DATOS 481.6.8 SOCKETS SIN CONEXIÓN 501.6.9 RECEPCIÓN DE DATOS POR UN SOCKET 501.6.9.1 DESCRIPCIÓN DEL PROCESO 511.6.10 REVISIÓN DE LAS FUNCIONES DE LA API WINDOWS
SOCKETS 521.6.10.1 FUNCIÓN SOCKET 531.6.10.2 FUNCIÓN DE BASE DE DATOS 551 .7 PROGRAMACIÓN CON WINDOWS SOCKETS 571.7.1 DESCRIPTOR DE SOCKET 571.7.1.1 FUNCIÓN SELECT 581-7.1.2 HOOK DE BLOQUEO 60
1.7.2 POSICIONES DE WINSOCK DENTRO DEL AMBIENTEWINDOWS 62
1.8 APLICACIÓN DEL ENTORNO DE DESARROLLO DEVISUAL C++ PARA EL MANEJO DE APLICACIONES CONSOCKETS 64
1.8.1 PROGRAMACIÓN ORIENTADA A OBJETOS CON VISUALC++ 64
1.8.1.1 ABSTRACCIÓN 651.8.1.2 ENCAPSULACIÓN 651.8.1.3 MODULARIDAD 661.8.1.4 JERARQUIZACIÓN 661.8.1.4.1 RELACIÓN DE LOS CONCEPTOS USANDO EL MODELO
DE OBJETOS 671.8.1.5 TIPIFICADO 671.8.1.6 CONCURRENCIA 681.8.1.7 PERSISTENCIA 681.8.2 CLASES Y OBJETOS 681.8.2.1 OBJETOS 681.8.2.1.1 ESTADO DE UN OBJETO 691.8.2.1.2 IDENTIDAD DE UN OBJETO 691.8.2.1.3 COMPORTAMIENTO DE UN OBJETO 691.8.2.1.4 RELACIÓN ENTRE OBJETOS 681.8.2.2 CLASES 701.8.2.2.1 RELACIÓN ENTRE CLASES 711.8.2.3 RELACIÓN ENTRE CLASES Y OBJETOS 721.8.2.4 ANÁLISIS ORIENTADO A OBJETOS 731.8.2.5 NOTACIÓN 731.8.2.6 CONCLUSIÓN 741.8.3 WINDOWS SOCKETS Y EL ENTORNO DE VISUAL C++ 751.8.3.1 CREACIÓN DE UN SOCKET 751.8.3.2 ESTABLECIMIENTO DE UNA CONEXIÓN 761.8.3.3 ENVIÓ Y RECEPCIÓN DE MENSAJES 781.8.34 CERRAR LA CONEXIÓN 811.8.3.5 DETECCIÓN DE ERRORES 81
CAPITULO 2
DISEÑO E IMPLEMENTACIÓN DE UN PROGRAMA PARA MONITOREO DEDISPOSITIVOS CONFIGURADOS CON TCP / IP
2.1 OBJETIVO 822.2 REQUERIMIENTOS DE SOFWARE PARA EL DISEÑO 832.3 REQUERIMIENTOS DE HARDWARE PARA DISEÑO 842.4 DISEÑO DEL PROGRAMA 852.4.1 CONTENIDO BÁSICO DEL DISEÑO 85
! 2.4.1.1 DATOS DE ENTRADA 852.4.1.2 DATOS DE SALIDA 862.4.1.3 OPCIONES 862.4.1.4 DIAGRAMA BÁSICO DE LA VENTANA DE DIÁLOGO
PRINCIPAL 882.4.2 CREACIÓN DEL OBJETO Y ASIGNACIÓN DE NOMBRES Y
FUNCIONES 882.4.2.1 OBJETO SELECCIONAR 89
i 2.4.2.2 OBJETO PRIMERA OPCIÓN DE MONITOREO 892.4.2.3 OBJETO SEGUNDA OPCIÓN DE MONITOREO 89
¡ 2.4.2.4 OBJETO INGRESO DE DIRECCIÓN IP 89i 2.4.2.5 OBJETO INGRESO DIRECCIÓN IP FINAL 90! 2.4.2.6 OBJETO INGRESO DE SECUENCIA DE MONITOREO 90¡ 2.4.2.7 OBJETO INGRESO DE TIEMPO DE MONITOREO 90| 2.4.2.8 OBJETO EJECUCIÓN DE MONITOREO 90i 2.4.2.9 OBJETO VISUALIZACIÓN DE DIRECCIÓN IP A1 MONITOREAR 91i 2.4.2.10 OBJETO VISUALIZACIÓN DE RESULTADOS DE
MONITOREO 911 2.4.2.11 OBJETO OPCIÓN AYUDA 91i 2.4.2.12 OBJETO OPCIÓN INICIALIZAR PANTALLA 91
2.4.2.13 OBJETO OPCIÓN IMPRIMIR 92,; 2.4.2.14 OBJETO OPCIÓN SALIR 92i 2.4.3 PRESENTACIÓN BÁSICA DE INTERFAZ PROGRAMA! USUARIO 92? 2.5 IMPLEMENTACIÓN DEL PROGRAMA 93í 2.5.1 CREACIÓN DEL PROYECTO CON EL APPWIZARD DE MFC 93f 2.5.2 IMPLEMENTACIÓN DE LA VENTANA PRINCIPAL 97
2.5.2.1 PRESENTACIÓN DE LA VENTANA PRINCIPAL 1242.5.3 IMPLEMENTACIÓN DE UN MENÚ 124
\1 PRESENTACIÓN DE LA VENTANA PRINCIPAL INCLUIDA EL
\Ú 133S 2.5.4 IMPLEMENTAC1ÓN DE LAS CLASES 133í 2.5.4.1 CLASE CMONITORJCMPDIg 134I 2.5.4.2 CLASE CMONITORJCMPApp 135í 2.5.5 IMPLEMENTACIÓN DE LAS ESTRUCTURAS DE CLASE 135
2.5.6 DEFINICIÓN DE VARIABLES DE LA CLASECMONITOR_ICMP_DLg 137
2.5.7 IMPLEMENTACIÓN DE LOS CONTROLES - ANÁLISIS DEMÉTODOS 138
2.5.7.1 FUNCIÓN OnBend(), PARA SALIR DEL PROGRAMA 1392.5.7.2 FUNCIÓN OnBLimpiar (), PARA IN1CIALIZAR LA PANTALLA 1402.5.7.3 FUNCIÓN OnBsend ( ), PARA SELECCIONAR LA OPCIÓN
PING 1422.5.7.4 FUNCIÓN OnReceive( ), PARA SELECCIONAR LA OPCIÓN
MONITOREO A UNA RED LOCAL 1442.5.7.5 FUNCIÓN OnBsend(), PARA EJECUTAR MONITOREO 146
CAPITULO 3
RESULTADOS Y PRUEBAS
3.1 RESULTADOS 1533.1.1 MONITOREANDO DESDE UNA PC NO CONECTADA A RED 1533.1.2 MONITOREANDO DESDE UNA PC CONECTADA A UNA RED
DE Á^EA LOCAL 1573.2 PRUEBAS 1643.2.1 MENSAJES DE ERROR 1643.2.2 MONITOREO A DISPOSITIVOS DENTRO DE LA RED 166
CAPITULO 4
CONCLUSIONES Y RECOMENDACIONES
4.1 CONCLUSIONES 1704.2 RECOMENDACIONES 172
RESUMEN
Para diseñar e implementar un programa para monitoreo de dispositivos
configurados con el Protocolo de Comunicaciones TCP / IP, se deben tomar en
cuenta dos aspectos fundamentales, la teoría acerca de Windows Sockets para
implementar aplicaciones para redes y sistemas de comunicaciones y la
programación orientada a objetos con visual C++, cuyo lenguaje proporciona las
herramientas necesarias para darle funcionalidad al programa de monitoreo de
redes.
Por dicha razón se ha dividido este Proyecto de Titulación en cuatro capítulos
bien diferenciados.
El primer capítulo da un enfoque muy centrado acerca de las redes de área
local LAN, del protocolo de comunicaciones TCP / IP, de cómo se transmite la
información por las redes a través de estos protocolos, además se revisa la
teoría de Windows Sockets y cómo poder implementar una aplicación usando
Visual C++ cómo herramienta de programación.
El segundo capítulo se enfoca en el diseño e implementación del programa,
explica los parámetros de diseño y los requerimientos tanto de software como de
hardware que se necesitan para crear la aplicación. Paso a paso se explica la
f forma en que se armó el proyecto. Se revisa los objetos creados, la asignación
Í de nombres y variables para los diferentes controles que usará el programa.
Luego de la explicación del diseño se muestra la forma de dar funcionalidad a
cada objeto, es la etapa de implementación, se presenta la pantalla principal y
la función de cada uno de los elementos que componen la clase diálogo.
En el tercer capítulo se muestra los resultados luego de haber implementado el
programa para monitoreo, se explica cómo será la interfaz de visualización para
el usuario, se analiza los posibles mensajes de error que el programa reportará
al ingresar datos que no corresponden y por último se prueba en una red LAN
real. Se indica los resultados luego de monitorear a ciertos dispositivos y los
tiempos que demora en dar una respuesta de eco. Las pruebas realizadas
muestran valores reales de monitoreo.
El cuarto capítulo indica ciertas conclusiones luego de realizado el proyecto y
recomendaciones para los usuarios futuros del programa y para aquellos que se
involucren en el campo de Programación en Internet.
PRESENTACIÓN
La expansión de las redes informáticas y de telecomunicaciones, impiementadas
en todo el mundo que usan el protocolo de red TCP/iP para la transmisión de
información, crecen cada día más y el monitoreo de las mismas es un
requerimiento muy necesario cuyo objetivo principal es generar reportes de la
disponibilidad y accesibilidad de todos los dispositivos de comunicaciones
presentes en dicha red, para llevar una efectiva planificación, organización,
supervisión y control de modo que se garantice un nivel de servicio eficiente por
parte de los administradores de la red.
En ios casos más normales un sistema de redes interconectadas (internets) no
toman topologías específicas sino que conectan las redes sin importar sus
topologías o tecnologías, estas internets utilizan dispositivos especiales, llamados
host, repetidores, puentes, enrutadores etc, para conectar las redes
independientes, en el caso de las redes de área local utilizan tales dispositivos
para extender la conexión dentro de su área.
El presente trabajo se ha desarrollado con el propósito de crear una herramienta
de software que permita monitorear a todo dispositivo configurado bajo el
¡protocolo de red TCP/IP dentro de redes de área local (LAN). Este programa de
[aplicación desarrollado utiliza una Interfaz de Programa de Aplicación (API,
Application Program Interface), que es un grupo de funciones que se utiliza para
desarrollar software. Cabe recalcar que en los últimos años el ambiente de
programación que se ha insertado aceleradamente en el mercado es el de
Microsoft Windows®, por esto la herramienta de programación a utilizar será un
software denominado Windows Sockets más conocido como Winsock que es una
API basada en el paradigma de sockets, esta API se dirige especialmente a la
familia de sistemas operativos de Microsoft Windows. Como Windows es una de
las plataformas de sistema operativo más populares en la actualidad, la
especificación de Windows Sockets define un estándar aceptado para el
desarrollo de programas en ambiente Windows en redes TCP/IP.
La idea básica de MONITOREO tal como lo definiesen los administradores o
usuarios de la red consiste en determinar si ciertos anfitriones remotos están
disponibles y accesibles en la red en ése momento para lo cual se transmite una
solicitud de eco y después se mide el tiempo que demora en llegar las respuestas.
CAPITULO 1
FUNDAMENTOS TEÓRICOS
1.1 REDES DE ÁREA LOCAL
1.1.1 DEFINICIÓN
Es un sistema de comunicación entre varios dispositivos electrónicos y
computadoras interconectadas entre sí, que permiten compartir información y
recursos, con la característica de que la distancia entre éstas debe ser pequeña.
La topología o la forma de conexión de los dispositivos en la red, depende de
algunos aspectos como la distancia y el medio de comunicación, ya que esto
determina, la velocidad del sistema.
1.2 TIPOS DE REDES
1.2.1 INTRODUCCIÓN
Las redes de área local, generalmente llamadas LAN (Local Área Networks), son
redes de propiedad privada dentro de un solo edificio o campus de hasta unos
cuantos kilómetros de extensión. Se usan ampliamente para conectar
computadoras personales y estaciones de trabajo en oficinas de compañías y
fábricas con objeto de compartir recursos (por ejemplo, impresoras) e
intercambiar información. Las LAN se distinguen de otro tipo de redes por tres
características: (1) su tamaño, (2) su tecnología de transmisión, y (3) su topología.
Las LAN están restringidas en tamaño, lo cual significa que el tiempo de
transmisión del peor caso está limitado y se conoce de antemano. Conocer este
límite hace posible usar ciertos tipos de diseños que de otra manera no serían
prácticos, y también simplifica la administración de la red.
Las LAN a menudo usan una tecnología de transmisión que consiste en un cable
sencillo al cual están conectadas todas las máquinas. Las LAN tradicionales
operan a velocidades de 10 a 100 Mbps, tienen bajo retardo (décimas de
| microsegundos) y experimentan muy pocos errores. Las LAN más nuevas pueden
operar a velocidades muy altas, de hasta Gigabits por segundo (Gbps).
En una red de bus (esto es, un cable lineal), en cualquier instante una
computadora es la máquina maestra y puede transmitir; se pide a las otras
máquinas que se abstengan de enviar mensajes. Es necesario un mecanismo de
arbitraje para resolver conflictos cuando dos o más máquinas quieren transmitir
simultáneamente. El mecanismo de arbitraje puede ser centralizado o distribuido.
Por ejemplo, la IEEE 802.3, popularmente llamada Ethernet, es una red de
transmisión basada en bus con control de operación descentralizado a 10 o 100
Mbps. Las computadoras de una Ethernet pueden transmitir cuando quieran; si
dos o más paquetes chocan, cada computadora sólo espera un tiempo aleatorio y
lo vuelve a intentar.
i Un segundo tipo de sistema de difusión es el anillo. En un anillo, cada bit se
i propaga por si mismo, sin esperar el resto del paquete al cual pertenece.'| Típicamente, cada bit recorre el anillo entero en el tiempo que toma transmitirí
•< unos pocos bits, a veces antes de que el paquete completo se haya transmitido.
Como en todos los sistemas de difusión, se necesitan reglas para arbitrar el
acceso simultáneo al anillo. Se emplea varios métodos. La IEEE 802.5 (el token
ring de IBM), es una popular LAN basada en anillo que opera a 4 y 16 Mbps.
i
i Las redes de difusión se pueden dividir también en estáticas y dinámicas,
| dependiendo de cómo se asigna el canal. Una asignación estática típica divide el
| tiempo en intervalos discretos y ejecuta un algoritmo de asignación cíclica,
permitiendo a cada máquina transmitir únicamente cuando le llega su turno. La
asignación estática desperdicia la capacidad del canal cuando una máquina no
tiene nada que decir durante su segmento asignado, por lo que muchos sistemas
| intentan asignar el canal dinámicamente (es decir, por demanda).
Los métodos de asignación dinámica para un canal común son centralizados o
descentralizados. En el método de asignación del canal centralizado hay una sola
entidad, por ejemplo una unidad de arbitraje del bus, la cual determina quien es el
siguiente. Podría hacer esto aceptando peticiones y tomando una decisión de
acuerdo con un algoritmo interno. En el método de asignación de canal
descentralizado no hay una entidad central; cada máquina debe decidir por sí
misma si transmite o no. Podríamos pensar que esto siempre conduce al caos,
pero no es así.
El otro tipo de LAN se construye con líneas punto a punto. Las líneas individuales
conectan una máquina específica a otra. Una LAN así, es realmente una red de
área amplia en miniatura.
1.2.2 RED TIPO ESTRELLA
Conectar un conjunto de computadoras en estrella es uno de los sistemas más
antiguos, equivale a tener un host central (servidor de archivos o se/ver, hub,
switch), encargada de controlar la información de toda la red. Dicha información
abarca desde los mensajes entre usuarios, datos almacenados en un archivo en
particular, manipulación de archivos, etc.
Para poder instalar este tipo de red, cada una de las computadoras utilizadas
como estaciones de trabajo necesitan de una tarjeta de conexión para lograr la
interface con la computadora o host central.
Fig. 1.1 Red tipo Estrella
1.2.3 RED TIPO BUS
Permite conectar a todas las computadoras de la red en una sola linea
compartiendo el mismo canal de datos (bus), de ahí su nombre. A fin de poder
identificar hacia cual de las computadoras de toda la red se está dirigiendo, se
añade un sufijo al paquete de información, este contiene la dirección de la
computadora que debe recibir la información en particular.
Cada una de las computadoras revisa el mensaje y compara la dirección de la
terminal de recepción, en caso de no ser igual a la propia, se rechaza y en caso
de ser igual la dirección, se acepta el mensaje.
Servidor dela Red
Fig. 1.2 Red Tipo Bus
1.2.4 RED TIPO ANILLO
Consiste en unir una serie de computadoras en un circuito cerrado formando un
anillo por donde circula la información en una sola dirección, factor que permite
tener un control de recepción de mensajes.
La forma interna de comunicación, de una computadora a otra, es similar a la del
canal de datos (Bus), sólo que en este caso se le añade la dirección de la
computadora que envía el mensaje para que la terminal receptora pueda
contestar a la terminal emisora.
Fig. 1.3 Red Tipo Anillo
1.3 PROTOCOLO DE RED TCP / IP
1.3.1 PROTOCOLOS DE RED
Los protocolos permiten especificar o entender una forma de comunicación sin
conocer los detalles del hardware de red de un vendedor en particular. Éstos son
para las comunicaciones entre computadoras, lo que los lenguajes de
programación para la computación. Como en el lenguaje ensamblador, algunos
protocolos describen la comunicación a través de una red física. Por ejemplo, los
detalles del formato de trama de la red Ethernet, las políticas de acceso a la red y
el manejo de errores de trama, se incluyen en un protocolo que describe la
comunicación en una red Ethernet. De la misma forma, los detalles de las
direcciones IP, el formato de los datagramas, y el concepto de entrega no
confiable y sin conexión, se incluyen en el Protocolo Internet.
Los sistemas complejos de comunicación de datos no utilizan un solo protocolo
para manejar todas las tareas de transmisión, sino que requieren de un conjunto
de protocolos. Cuando las máquinas se comunican a través de una red de datos
se presentan varios inconvenientes entre ellos:
• Fallas en el Hardware.- Un anfitrión o un ruteador puede fallar, ya sea
porque el hardware falle o porque el sistema operativo quede fuera de
servicio. Un enlace de transmisión de red puede fallar o desconectarse
accidentalmente. El software de protocolo necesita detectar estas fallas y
restablecer el funcionamiento.
Congestionamiento en la red.- Aunque el hardware y el software estén
funcionando correctamente, éstos tienen una capacidad finita que puede
ser excedida. El software de protocolo debe implantar un arreglo en las
vías de transmisión para que una máquina congestionada no entorpezca el
tráfico.
L
• Paquetes retrasados o perdidos.- Ciertas veces, el envío de paquetes
tiene retrasos muy largos o éstos se pierden. El software de protocolo
necesita aprender acerca de las fallas o debe adaptarse a los retardos.
• Corrupción de datos.- La interferencia eléctrica, magnética o las fallas en
el hardware pueden ocasionar errores de transmisión que alteran el
contenido de los datos transmitidos. El software de protocolo necesita
detectar y reparar estos errores.
• Errores en la secuencia de los datos o duplicación de datos.- Las
redes que ofrecen múltiples rutas pueden entregar los datos fuera de
secuencia o entregar paquetes duplicados. El software de protocolo
necesita reordenar los paquetes y suprimir los duplicados.
Si se consideran en conjunto, todos estos problemas parecen abrumadores. Es
difícil entender cómo se podría escribir un solo protocolo para manejar todos
estos problemas. A partir de una analogía con los lenguajes de programación se
debe ver cómo superar la complejidad de este problema. Si se considera la
subdivisión en cuatro subproblemas conceptuales de las transformaciones
realizadas por un programa, identificando cada una de las partes con el software
que maneja cada subproblema: compilador, ensamblador, editor de enlace y
cargador. Esta división hace posible que el diseñador se concentre en un
subproblema por vez, y también hace posible que el desabollador construya y
pruebe cada parte del software de manera independiente.
Dos observaciones acerca de esta analogía con los lenguajes de programación
ayudarán a aclarar la organización de protocolos. En primer lugar, debe quedar
claro que las partes del software deben mantener un acuerdo sobre el formato
exacto de los datos que pasan entre ellas. Por ejemplo, los datos que pasan del
compilador hacia el ensamblador provienen de un programa definido por el
lenguaje de programación ensamblador. La analogía se sostiene para el caso del
software de comunicación, en el cual se puede ver que varios protocolos definen
la interfaz entre los módulos de software de comunicación. En segundo lugar, las
cuatro partes de la transferencia siguen una secuencia lineal, en la que la salida
del compilador es la entrada del ensamblador y así sucesivamente. El software de
protocolo también utiliza una secuencia lineal.
1.3.2 CAPAS CONCEPTUALES DEL SOFTWARE DE PROTOCOLO.
L
Se analiza los módulos del software de protocolo en una máquina como una pila
vertical constituida por capas, como en la figura siguiente. Cada capa tiene la
responsabilidad de manejar una parte del problema.
Emisor
ICapan
Capa 2
Capa 1
Receotor
ICapan
Capa 2
Capa 1
Fig. 1.41 Organización conceptual del software de protocolo en capas.
Conceptualmente, enviar un mensaje desde un programa de aplicación en una
máquina hacia un programa de aplicación en otra, significa transferir el mensaje
hacia abajo, por las capas sucesivas del software de protocolo en la máquina
emisora, transferir el mensaje a través de las capas sucesivas del software de
protocolo en la máquina receptora.
En la práctica, el software de protocolo es mucho más complejo de lo que se
muestra en el modelo simplificado en la figura 1.4. Cada capa toma decisiones
acerca de lo correcto del mensaje y selecciona una acción apropiada con base en
Redes Globales de Información con Internet y TCP/IP, Douglas E. Comer, Prentice Hall 3ra. Edición 1996, Pag. 163
el tipo de mensaje o la dirección de destino. Por ejemplo, una capa en la máquina
de recepción debe decidir cuándo tomar un mensaje o enviarlo a otra máquina.
Otra capa debe decidir qué programa de aplicación deberá recibir el mensaje.
Para entender la diferencia entre la organización conceptual del software de
protocolo y los detalles de implantación, consideremos la comparación que se
muestra en la figura 1.5. El diagrama conceptual en la figura 1.5 (a), muestra una
capa de Internet entre una capa de protocolo de alto nivel y una capa de interfaz
de red. El diagrama realista de la figura 1.5 (b), muestra el hecho de que el
software IP puede comunicarse con varios módulos de protocolo de alto nivel y
con varias interfaces de red.
Capas conceptuales
Capa de protocolode alto nivel
Capa de protocoloInternet
Capa de interfazde red
(a)
Organización del Software
Protocolo 1
Interfaz 1
Protocolo 2
Módulo IP
Interfaz 2
(b)
Interfaz 3
Fíg I.51 Una comparación de (a) estratificación por capas conceptual de protocolos y, (b) una visión
realista de la organización del software que muestra varias interfaces de red entre IP y varios
protocolos.
Como se muestra en la Figura 1.6, un emisor en la máquina original transmite un
mensaje que la capa de IP coloca en un datagrama y envía a través de la Red 1.
En las máquinas intermedias el datagrama pasa hacia la capa IP, la cual rutea el
datagrama de regreso, nuevamente (hacia una red diferente). Sólo cuando se
alcanza la máquina en el destino final, IP extrae el mensaje y lo pasa hacia arriba,
hacia las capas superiores del software de protocolo.
Redes Globales de Información con Internet y TCP/IP, Douglas E. Comer, Prentice Hall 3ra. Edición 1996, Pag. 164
10
Fig 1.61 Trayectoria de un mensaje que atraviesa Internet desde un emisor, a través de dos máquinas
intermedias, hasta un receptor. Las máquinas intermedias sólo envían el datagrama hacia la capa de
software IP.
1.3.3 FUNCIONALIDAD DE LAS CAPAS.
Una vez que .se ha tomado la decisión de subdividir los problemas de
comunicación en cuatro subproblemas y organizar el software de protocolo en
módulos, de manera que cada uno maneje un subproblema, surge la pregunta:
"¿qué tipo de funciones deben instalarse en cada módulo?" La pregunta no es
fácil de responder por varias razones. En primer lugar, un conjunto de objetivos y
condiciones determinan un problema de comunicación en particular, es posible
elegir una organización que optimice el software de protocolo para ese problema.
Segundo, incluso cuando se consideran los servicios generales a nivel de red,
como un transporte confiable, es posible seleccionar entre distintas maneras de
resolver el problema. Tercero, el diseño de una arquitectura de red ( o de una red
Redes Globales de Información con Internet y TCP/IP, Douglas E. Comer, Prentice Hall 3ra. Edición 1996, Pag. 164
11
de redes ) y la organización del software de protocolo están interrelacionados; no
se puede diseñar a uno sin considerar al otro.
1.3.4 MODELO DE REFERENCIA OSI.
El modelo OSI mostrado en la figura 1.7, se basa en una propuesta que desarrolló
la Organización Internacional de Normas (ISO, por sus siglas en inglés) como
primer paso hacia la estandarización internacional de los protocolos que se usan
en las diversas capas. El modelo se llama modelo de referencia OSI (Open
Systems Interconection, Interconexión de sistemas abiertos) de la ISO puesto que
se ocupa de la conexión de sistemas abiertos, esto es, sistemas que están
abiertos a la comunicación con otros sistemas. Usualmente se lo llama sólo
modelo OSI.
Capa
7
6
5
4
3
Función.
Aplicación
Presentación
Sesión
Transporte
Red
Enlace de datos(Interfaz de hardware)
Conexión deHardware físico
Fig. 1.71 Modelo de referencia OSI, para software de protocolo.
Redes Globales de Información con Internet y TCP/IP, Douglas E. Comer, Prentice Hall 3ra. Edición 1996, Pag. 165
12
El modelo OSI tiene siete capas. Los principios que se aplicaron para llegar a las
siete capas son los siguientes:
1. Se debe crear una capa siempre que se necesite un nivel diferente de
abstracción.
2. Cada capa debe realizar una función bien definida.
3. La función de cada capa se debe elegir pensando en la definición de
protocolos estandarizados internacionalmente.
4. Los límites de las capas deben elegirse a modo de minimizar el flujo de
información a través de las interfaces.
5. La cantidad de capas debe ser suficiente para no tener que agrupar
funciones distintas en la misma capa y lo bastante pequeña para que la
arquitectura no se vuelva inmanejable.
1.3.5 MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE
INTERNET
El segundo modelo mayor de estratificación por capas no se origina de un comité
de estándares, sino que proviene de las investigaciones que se realizan respecto
al conjunto de protocolos de TCP/IP. Con un poco de esfuerzo, el modelo OSI
puede ampliarse y describir el esquema de estratificación por capas del TCP/IP,
pero los presupuestos subyacentes son lo suficientemente distintos para
distinguirlos como dos diferentes.
En términos generales, el software TCP/IP está organizado en cuatro capas
conceptuales que se construyen sobre una quinta capa de hardware. La figura 1.8
muestra las capas conceptuales así como la forma en que los datos pasan entre
ellas.
13
Capa conceptual
Aplicación
Transporte
Internet
Interfaz de red
Paso de objetosentre capas
Flujos o mensajes
Paquetes de protocolo detransporte
Datagramas IP
Tramas específicas de red
Hardware
Fig. 1.81 Las cuatro capas conceptuales del software TCP/IP y la forma en que los objetos pasan entre
capas. La capa con el nombre interfaz de red se conoce con frecuencia con el nombre de capa de
enlace de datos.
1.3.5.1 Capa Interfaz de Red
El software TCP/IP de nivel inferior consta de una capa de interfaz de red
responsable de aceptar los datagramas IP y transmitirlos hacía una red
específica. Una interfaz de red puede consistir en un dispositivo controlador (por
ejemplo, cuando la red es una red de área local a la que las máquinas están
conectadas directamente) o un complejo subsistema que utiliza un protocolo de
enlace de datos propio (por ejemplo, cuando la red consiste de conmutadores de
paquetes que comunican con anfitriones utilizando HDLC2).
1.3.5.2 Capa Internet
La capa Internet maneja la comunicación de una máquina a otra. Ésta acepta
una solicitud para enviar un paquete desde la capa de transporte, junto con una
identificación de la máquina, hacia la que se debe enviar el paquete. Encapsula el
paquete en un datagrama IP, llena el encabezado del datagrama, utiliza un
algoritmo de ruteo para determinar si puede entregar el datagrama directamente o
Redes Globales de Información con Internet y TCP/IP, Douglas E. Comer, Prentice Hall 3ra. Edición 1996, Pag. 168Hight - level - Data link Control, control de enlace de datos de alto nivel
14
si debe enviarlo a un ruteador y pasar el datagrama hacia la interfaz de red
apropiada para su transmisión.
La capa Internet también maneja la entrada de datagramas, verifica su validez y
utiliza un algoritmo de ruteo para decidir si el datagrama debe procesarse de
manera local o debe ser transmitido. Para el caso de los datagramas
direccionados hacia la máquina local, el software de la capa Internet borra el
encabezado del datagrama y selecciona, de entre varios protocolos de transporte,
un protocolo con el que manejará el paquete.
CapaFísica
Líneas de Transmisión
Fig. 1.91 La capa de red de TCP/IP incluye los módulos de software de IP, ICMP e IGMP.
Por último, la capa Internet envía los mensajes ICMP de error y control necesarios
y maneja todos los mensajes ICMP entrantes.
Programación en Internet, Hamsa Cris - Cope Kcn, McGraw HUÍ 1 ra. Edición 1996, Pag. 75
15
Debida a la estrecha relación entre el Protocolo Internet y la capa de red, gran
parte de la literatura sobre Internet y TCP/IP se refieren a la capa de red como la
capa IP.
1.3.5.3 Capa de Transporte
La principal tarea de la capa de transporte es proporcionar la comunicación entre
un programa de aplicación y otro. Este tipo de comunicación se conoce
frecuentemente como comunicación punto a punto. La capa de transporte regula
el flujo de información. Puede también proporcionar un transporte confiable,
asegurando que los datos lleguen sin errores y en secuencia. Para hacer esto, el
software de protocolo de transporte tiene el lado de recepción enviando acuses
de recibo de retorno y la parte de envío retransmitiendo los paquetes perdidos. El
software de transporte divide el flujo de datos que se está enviando en pequeños
fragmentos (por lo general conocidos como segmentos) y pasa cada segmento,
con una dirección de destino, hacia la siguiente capa de transmisión.
Aún cuando en la figura 1.9, se utiliza un solo bloque para representar la capa
aplicación, una computadora de propósito general puede tener varios programas
de usuario y enviarlos a la capa del siguiente nivel. Para hacer esto, se añade
información adicional a cada paquete, incluyendo códigos que identifican qué
programa de aplicación envía y qué programa de aplicación debe recibir, así
como una suma de verificación. La máquina de recepción utiliza la suma de
verificación para verificar que el paquete ha llegado intacto y utiliza el código de
destino para identificar el programa de aplicación en el que se debe entregar.
1.3.5.4 Capa de Aplicación
En el nivel más alto, los usuarios llaman a una aplicación que accesa servicios
disponibles a través de la red de redes TCP/IP. Una aplicación interactúa con uno
de los protocolos de nivel de transporte para enviar o recibir datos. Cada
programa de aplicación selecciona el tipo de transporte necesario, el cual puede
ser una secuencia de mensajes individuales o un flujo continuo de octetos. El
16
programa de aplicación pasa los datos en la forma requerida hacia el nivel de
transporte para su entrega.
1.3.6 PRINCIPIO DE ESTRATIFICACIÓN POR CAPAS DE PROTOCOLOS
Independientemente del esquema de estratificación por capas que se utilice o de
las funciones de las capas, la operación de los protocolos estratificados por capas
se basa en una idea fundamental. La idea, conocida como principio de
estratificación por capas puede resumirse de la siguiente forma:
Anfitrión A Anfitrión B
Fig 1.101 Trayectoria de un mensaje cuando pasa de la aplicación en un anfitrión a la aplicación en
otro. Una capa n en el anfitrión B recibe exactamente el mismo objeto que la capa n correspondiente
del anfitrión emisor A.
Redes Globales de Información con Internet y TCP/IP, Douglas E. Comer, Prentlce Hall 3ra. Edición 1996 , Pag. 171
17
Los protocolos estratificados por capas están diseñados de modo que una capa n
en el receptor de destino reciba exactamente el mismo objeto enviado por la
correspondiente capa n de la fuente.
El principio de estratificación por capas explica por qué la estratificación por capas
es una idea poderosa. Esta permite que el diseñador de protocolos enfoque su
atención hacia una capa a la vez, sin preocuparse acerca del desempeño de las
capas inferiores. Por ejemplo, cuando se construye una aplicación para
transferencia de archivos, el diseñador piensa sólo en dos copias del programa de
aplicación que se correrá en dos máquinas y se concentrará en los mensajes que
se necesitan intercambiar para la transferencia de archivos. El diseñador asume
que la aplicación en el anfitrión receptor es exactamente la misma que en el
anfitrión emisor.
La figura 1.10, ilustra cómo trabaja el principio de estratificación por capas.
1.3.7 FRONTERAS IMPORTANTES EN EL MODELO TCP/IP
La estratificación por capas conceptual incluye dos fronteras que podrían no ser
obvias: una frontera de dirección de protocolo que separa los direccionamlentos
de alto nivel y de bajo nivel, y una frontera de sistema operativo que separa al
sistema de los programas de aplicación.
1.3.7.1 Frontera de dirección de protocolo de alto nivel
Ahora que se ha visto la capa de software TCP/IP, se puede precisar la idea de la
partición de una frontera conceptual entre el software que utiliza direcciones de
bajo nivel (físicas), con respecto a un software que utiliza direcciones de alto nivel
(IP). Como se muestra en la figura 1.11, la frontera aparece entre la capa de
¡nterfaz de red y la capa de Internet.
18
Capas conceptuales
Aplicación
Transporte
Internet
Interfaz de red
Frontera
Software fuera del sistema operativo
Software dentro del sistema operativo
Solo se utilizan direcciones IP
Se utilizan direcciones físicas
Hardware
Fig. l.ll1 Relación entre la estratificación por capas conceptual y las fronteras, para el sistema
operativo y las direcciones de protocolo de alto nivel.
Los programas de aplicación, así como todo el software del protocolo desde la
capa de Internet hacia arriba, utiliza solo direcciones IP; la capa de interíaz de red
maneja direcciones físicas.
1.3.7.2 Frontera de Sistema Operativo
La figura 1.11, muestra otra frontera también importante, la división entre el
software que generalmente se considera parte del sistema operativo respecto al
software que no lo es. En tanto que cada implantación del TCP/IP determina
cómo se establece la distinción, muchos siguen el esquema mostrado. Dado que
los colocan dentro del sistema operativo, e! paso de datos entre las capas
inferiores del software de protocolo es relativamente menos caro que su paso
entre un programa de aplicación y una capa de transporte.
1.4 ENCAPSULAMIENTO DE DATOS
Para hacer una transmisión por una red en capas los datos deben pasar de la
capa aplicación a un protocolo en la pila de protocolos. Una vez que éste termina
con ellos, los pasa al siguiente protocolo de la pila. Conforme sus datos pasan por
cada una de las capas de la pila, el software de red (módulos de protocolo) los
Redes Globales de Información con Internet y TCP/IP, Douglas E. Comer, Prentice Hall 3ra. Edición 1996, Pag. 175
19
encapsula para el siguiente nivel inferior en la pila. Por lo tanto, el
encapsulamiento es el proceso de guardar la información en el formato requerido
por el protocolo siguiente del nivel inferior de la pila. Conforme sus datos viajan
por la pila de protocolos, cada capa trabaja sobre lo que encapsuló la capa
anterior. La figura 1.12, muestra cómo el software de red encapsula la
información cuando utiliza el Protocolo de Control de Transporte (TCP, Transport
Control Protocol) en una red Ethernet.
Aplicación
1Encabezado
de laaolicación
r i
Datos delusuario
TCPMensaje ae la aplicación
V i
EncabezadoTCP
Datos de la Aplicación
IPSegmento TCP
1Encabezado
IP
r ' - -^Encabezado
TCPDatos de la Aplicación
ControladorEthernet Datagrama (paquete) IP
Encabezad*Ethernet
EncabezadoIP
EncabezadoTCP
Datos de la Aplicación TrailerEthernet
Línea detransmisiónde Ethernet
I4bytes 20bytes 20 bytes Tamaño variable
i Trama Ethernet
i 4 bytes
De 46 a 1500 bytes
Fig 1.121 Encapsulamiento de datos utilizando TCP en una red Ethernet.
Programación en Internet, Hamsa Cris- Cope Ken, McGravv HUÍ Ira. Edición 1996, Pag. 76
20
Del gráfico se puede observar que el módulo de aplicación puede encapsular los
datos del usuario en un mensaje de la aplicación. El diseño de un programa
determina si éste debe utilizar o no este mensaje. En muchos casos, el programa
puede formatear los datos del usuario para que los use un protocolo de la red,
digamos TCP. Como muestra la figura 1.12, el módulo TCP formatea los datos de
la aplicación en un segmento TCP, el cual incluye los datos de la aplicación junto
con el encabezado de información TCP que necesita el protocolo. Los datos de la
aplicación incluyen un encabezado de la aplicación ( si se requiere) y los datos del
usuario. Conforme la información pasa por el módulo IP en la capa de red, el
software de red formatea el segmento TCP para convertirlo en un datagrama (o
paquete) IP. El controlador de Ethernet formatea los datos del módulo IP y los
coloca dentro de una trama Ethernet.
La figura 1.12 es un ejemplo del proceso de encapsulamiento. Los protocolos
TCP/IP encapsulan los datos formateandolos para que se adecúen a la estructura
definida por el protocolo.
1.4.1 DATAGRAMA IP
El protocolo Internet (IP) es el sistema de la entrega del conjunto de protocolos
TCP/IP y, por lo tanto, de Internet. IP emplea datagramas no confiables sin
conexión para llevar la información a través de una red TCP/IP. Se puede
denominar a estos datagramas datagramas IP. Las redes de TCP/IP transmiten
todos los datos de las aplicaciones a lo largo de Internet como datagramas IP,
cada uno de los cuales incluye un encabezado IP y los datos reales.
Un datagrama es una unidad de datos autocontenida. En contraste, un flujo de
bytes representa los datos como un flujo constante de ellos (sin importar cuántos
mensajes de la red realmente entreguen los datos). El término datagrama
especifica un tipo de servicio de entrega, es decir, un protocolo puede utilizar
datagramas o flujo de bytes. Un tipo particular de datagrama, como el IP o el
UDP, especifica el formato y contenido de ese datagrama.
21
1.4.2 PAQUETE IP
La literatura sobre Internet puede referirse a un datagrama IP como un paquete
IP: ambos conceptos son sinónimos.
Paquete es un término genérico que se refiere a una unidad de datos no
identificados. Cuando se usa el término paquete IP, especifica una unidad de
datos IP. En otras palabras, paquete se refiere a los datos, datagrama al servicio
de entrega.
1.4.3 ESTRUCTURA DE UN DATAGRAMA IP
El Protocolo IP proporciona un sistema de distribución que es poco fiable incluso
en una base sólida. El protocolo IP especifica que la unidad básica de
transferencia de datos en el TCP/IP es el datagrama.
Los datagramas pueden ser retrasados, perdidos, duplicados, enviados en una
secuencia incorrecta o fragmentados intencionadamente para permitir que un
nodo con un buffer limitado pueda coger todo el datagrama. Es la responsabilidad
del protocolo IP reensamblar los fragmentos del datagrama en el orden correcto.
En algunas situaciones de error los datagramas son descartados sin mostrar
ningún mensaje mientras que en otras situaciones los mensajes de error son
recibidos por la máquina origen (esto lo hace el protocolo ICMP).
El protocolo IP también define cuál será la ruta inicial por la que serán mandados
los datos.
Cuando los datagramas viajan de unos equipos a otros, es posible que atraviesen
diferentes tipos de redes. El tamaño máximo de estos paquetes de datos puede
variar de una red a otra, dependiendo del medio físico que se emplee para su
transmisión. A este tamaño máximo se le denomina MTU (Máximum Transmission
Unit), y ninguna red puede transmitir un paquete de tamaño mayor a esta MTU. El
datagrama consiste en una cabecera y datos.
22
1.4.4 ENCABEZADO IP
Una red TCP/IP encapsula casi toda la información que viaja a través de Internet
dentro de un datagrama IP. La encapsulación crea tal datagrama, el cual incluye
un encabezado IP y los datos. El software de red siempre crea los encabezados
IP en múltiplos de palabras de 32 bits, incluso cuando tenga que "rellenar" (incluir
ceros adicionales) el encabezado IP. El encabezado IP incluye toda la información
necesaria para entregar los datos encapsulados dentro del datagrama IP.
Posicionesde los bits
15 I 16 31á
20By
i
i
tes
r
Versión (VER) Hlen (LEN) Tipo de Servicio4 bits 4 bits (TOS) 8 bits
Identificación16 bits
Tiempo de vida Protocolo(TTL) 8 bits 8 bits
Longitud Total del Paquete(enbytes) 16 bits
Banderas Fragmentos de3 bits Compensación 1 3 bits
Suma de ComprobaciónDel Encabezado 16 bits
Dirección IPOrigen 32 bits
Dirección IPDestino 32 bits
Opciones (si las hay) Ruta (si se requiere)
Datos
Fig. 1.131 Estructura de un datagrama IP que muestra los campos en el encabezado IP.
1.4.4.1 Longitud de la Cabecera
Este campo ocupa 4 bits, y representa el número de octetos de la cabecera
dividido por cuatro, lo que hace que éste sea el número de grupos de 4 octetos en
la cabecera.
Programación en Internet, Hamsa Cris- Cope Ken, McGraw Hill Ira. Edición 1996, Pag: 86
23
1.4.4.2 Versión
El campo versión ocupa 4 bits. Este campo hace que diferentes versiones del
protocolo IP puedan operar en la Internet. En este caso se trata de la versión 4.
1.4.4.3 Tipo de Servicio
Este campo ocupa un octeto de la cabecera IP, y especifica la precedencia y la
prioridad del datagrama IP. Los tres primeros bits del octeto indican la
precedencia. Los valores de la precedencia pueden ser de O a 7. Cero es la
precedencia normal, y 7 está reservado para control de red. Muchos gateways
ignoran este campo.
Los otros 4 bits definen el campo prioridad, que tiene un rango de O a 15. Las
cuatro prioridades que están asignadas son: O, (por defecto, servicio normal), 1
(minimizar el coste monetario), 2 (máxima fiabilidad), 4 (Maximizar la
transferencia), 8 (El bit 4 igual a 1, define minimizar el retraso). Estos valores son
utilizados por los routers para direccionar las solicitudes de los usuarios.
1.4.4.4 Longitud Total
Este campo se utiliza para identificar el número de octetos en el datagrama total.
1.4.4.5 Identificación
El valor del campo identificación es un número secuencia! asignado por el Host
origen. El campo ocupa dos octetos. Los números oscilan entre O y 65.535, que
cuando se combinan con la dirección del Host forman un numero único en la
Internet. El número se usa para ayudar en el reensamblaje de los fragmentos de
datagramas.
24
1.4.4.6 Fragmentos Offset
Cuando el tamaño de un datagrama excede el MTU, este se segmenta.
El fragmento Offset representa el desplazamiento de este segmento desde el
inicio del datagrama entero.
1.4.4.7 Flags
El campo flag ocupa 3 bits y contiene dos flags. El bit 5 del campo flags se utiliza
para indicar el último datagrama fragmentado cuando toma valor cero. El bit 7 lo
utiliza el servidor origen para evitar la fragmentación. Cuando este bit toma valor
diferente de cero y la longitud de un datagrama excede el MTU, el datagrama es
descartado y un mensaje de error es enviado al Hosf de origen por medio del
protocolo.
1.4.4.8 Tiempo de Vida
El campo tiempo de vida ocupa un octeto. Representa el número máximo de
segundos que un datagrama puede existir en Internet, antes de ser descartado.
Un Datagrama puede existir un máximo de 255 segundos. El número
recomendado para IP es 64.
El originador del datagrama manda un mensaje ICMP cuando el datagrama es
descartado.
25
1.4.4.9 Protocolo
El campo protocolo se utiliza para identificar la capa de mayor nivel más cercana
usando el IP. Este es un campo de O bits, que normalmente identifica tanto la
capa TCP (valor 6), como la capa UDP (valor 17) en el nivel de transporte, pero
puede identificar hasta 255 protocolos de la capa de transporte.
1.4.4.10 Checksum
El checksum proporciona la seguridad de que el datagrama no ha sido dañado ni
modificado. Este campo tiene una longitud de 16 bits. Incluye todos los campos
de la cabecera IP, incluido el mismo, cuyo valor es cero a efectos de cálculo.
Un Gateway o nodo que efectúe alguna modificación en los campos de la
cabecera (por ejemplo en el tiempo de vida), debe recalcular el valor del
checksum antes de enviar el datagrama.
Los usuarios del IP deben proporcionar su propia integridad en los datos, ya que
el checksum es solo para la cabecera.
1.4.4.11 Dirección de Origen
Este campo contiene un identificador de red (Netid) y un identificador de Host
(Hostid). El campo tiene una longitud de 32 bits. La dirección puede ser de clase
A, B, C.
1.4.4.12 Dirección de Destino
Este campo contiene el Netid y el Hostid del destino. El campo tiene una longitud
de 32 bits. La dirección puede ser de clase A, B, C o D.
26
1.4.4.13 Opciones
La existencia de este campo viene determinada por la longitud de la cabecera. Si
ésta es mayor de cinco por lo menos existe una opción.
Aunque un Hosí no está obligado a poner opciones, puede aceptar y procesar
opciones recibidas en un datagrama. El campo Opciones es de longitud variable.
Cada octeto está formado por los campos Copia, Clase de Opción y Número de
Opción.
• El campo Copia sirve para cuando un datagrama va a ser fragmentado y
viaja a través de nodos o Gateways. Cuando tiene valor 1, las opciones
son las mismas para todos los fragmentos, pero si toma valor O, las
opciones son eliminadas.
• Clase de Opción es un campo que cuando tiene valor O, indica datagrama
o control de red; Cuando tiene valor 2, indica depuración o medida. Los
valores 1 y 3 están reservados para un uso futuro.
• El Número de Opción indica una acción específica.
Características de la Opción IP
Clasede
Opción
o000002
Númerode
Opción0
123
?94
Octetos
11
11Var
| Var| Var[ Var
Descripción
Fin de alineamientoPara alinear dentro de una lista de opciones
Seguridad (aplicaciones militares)Ruteo del OrigenGrabar/trazar ruta
Ruteo estricto del OrigenFecha y hora de Internet
Tabla l.l1 Características de la Opción IP
Protocolos TCP/IP, Juan S. Miravet Bonet, a 1019 Kl)3 (a. n I u. nía ü-uj Us
•Bh-
1.4.4.14 Datos
Cabecera
IP
MSB
27
sb
Versión
1Isb
oLong. cabecera
Tipo de servicio
Longitud Total
Identificación
Fragmento Offset
Tiempo de vidaProtocolo
Suma de Comprobación
Dirección Origen
Dirección Destino
Opciones
Pudding
Datos IP
+0
+3+4
=^ss=
+5
+7
+8
+9+10+11
m•HB WVB
+13+14
+15+16+17+18+19+20+21+22+23+0
+1
Fig. 1.141 Formato del Datagrama IP
El campo datos consiste en una cadena de octetos. Cada octeto tiene un valor
entre O y 255. El tamaño de la cadena puede tener un mínimo y un máximo,
dependiendo del medio físico. El tamaño máximo esta definido por la longitud total
del datagrama. (Longitud Total del Datagrama) - (Longitud de la cabecera)
Protocolos TCP/IP, Juan S. Miravet Bonet, slfll9803fif.-nlnmail.uli.es httit://infasf.es/FORMA<:i<).N7l\TFR\KT/H:nli).liiiiil
28
1.4.4.15 Padding
Cuando está presente el campo Pad, consiste en 1 a 3 octetos puestos a cero, sí
es necesario, para hacer que el número total de octetos en la cabecera sea
divisible por cuatro.
1.4.5 DIRECCIONES IP
Las direcciones IP, hacen que el envío de datos entre computadoras se haga de
forma eficaz.
Las direcciones IP tienen 32 bits, formados por cuatro campos de 8 bits
separados por puntos. Cada campo puede tener un valor comprendido entre O y
255. Está compuesta por una dirección de red, seguida de una dirección de
subred y de una dirección de host.
1.4.5.1 Clases de Direcciones IP
1.4.5.1.1 Direcciones IP Clase A
Contiene 7 bits para direcciones de red, con lo que permite tener hasta 126 redes,
con 16.777.214 computadoras cada una. Las direcciones estarán comprendidas
entre 0.0.0.0 y 127.255.255.255, y la máscara de subred será 255.0.0.0.
1.4.5.1.2 Direcciones IP Clase B
Contiene 14 bits para direcciones de red y 16 bits para direcciones de hosts. El
número máximo de redes es 16.534 redes, con 65.534 computadoras por red. Las
direcciones estarán comprendidas entre 128.0.0.0. y 191.255.255.255., y la
máscara de subred será 255.255.0.0.
29
/. 4,5.1.3 Direcciones IP Clase C
Contiene 21 bits para direcciones de red y 8 para hosts, lo que permite tener un
total de 2.097.140 redes, cada una de ellas con 254 computadoras. Las
direcciones estarán comprendidas entre 192.0.0.0. y 223.255.255.255, y la
máscara de subred será 255.255.255.0.
1.4.5.1.4 Direcciones IP Clase D
Se reserva todas las direcciones para multídestíno (multicast), es decir, una
computadora transmite un mensaje a un grupo especifico de computadoras de
esta clase. Las direcciones estarán comprendidas entre 224.0.0.0. y
239.255.255.255.
1.4.5.1.5 Direcciones IP Clase E
Se utiliza exclusivamente para fines experimentales. Las direcciones están
comprendidas entre 240.0.0.0. y 247.255.255.255.
1.4.5.2 IP (Internet Protocol) Versión 6
Esta es una nueva versión del protocolo IP, llamada IPv6, amigue también es
conocida como IPng (Internet Protocol Next Generation). Es la versión 6, debido a
que la número 5 no pasó de la fase experimental. La compatibilidad con la versión
4 es prácticamente total, ya que se han incluido características de compatibilidad.
Algunas de las modificaciones, están encaminadas a mejorar la seguridad en la
red, que apenas existía en la versión 4.
1.4.5.2.1Formato de la cabecera.
Esta cabecera ocupa el doble que la anterior, pero se ha simplificado omitiendo
algunos campos y haciendo que otros sean opcionales. De esta manera, los
routers no tienen que procesar tanta información.
L
30
Los campos son los siguientes:
• Versión: Este campo ocupa 4 bits, y contiene el número de versión del IP,
en este caso 6.
• Prioridad: Ocupa 4 bits, y indica la importancia del paquete que se esta
enviando.
• Etiqueta de Flujo: Ocupa 24 bits. Indica que el paquete requiere un
tratamiento especial por parte de los routers que lo soporten.
• Longitud: Ocupa 16 bits. Indica la longitud en bytes de los datos del
mensaje
• Siguiente Cabecera: Ocupa 8 bits e indica a qué protocolo corresponde la
cabecera que está a continuación de la actual.
• Tiempo de vida: Ocupa 8 bits y tiene la misma función que en la versión 4.
• Dirección de origen: Ocupa 128 bits (16 octetos), y es el número de
dirección del origen.
Dirección de Destino: Ocupa 128 bits (16 octetos). Es el número de
dirección del destino.
31
OCTETO O
7 6 5 4 3 2 1 0
Versión
OCTETO 1
7 6 5 4 3 2 1 0
Prioridad
OCTETO 2 OCTETO 3
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Etiqueta de Flujo
Longitud Siguiente cabecera Tiempo de Vida
Dirección de Origen (128 bits)
Dirección de Destino (128 bits)
Fig. 1.15 Formato de la Cabecera del IPvó
1.4.5.2.2 Direcciones IP Versión 6
El cambio más significativo en las direcciones ha sido que ahora se refieren a un
interfaz y no a un nodo, aunque como cada interfaz pertenece a un nodo, es
posible referirse a estos mediante su interfaz.
El número de direcciones diferentes se ha multiplicado de una manera exagerada.
Teóricamente, es posible tener 2128 direcciones diferentes. Este número quiere
decir que se podrían llegar a tener más de 665.000 trillones de direcciones por
metro cuadrado, aunque si siguieran una jerarquía, este número decrece hasta
1564 direcciones por metro cuadrado en el peor caso o tres trillones siendo
optimistas.
En el IPv6 existen tres tipos básicos de direcciones:
• Direcciones unicast: Están dirigidas a una única interfaz en la red.
Actualmente se dividen en varios grupos, y existe un grupo especial que
facilita la compatibilidad con las direcciones de la versión 4.
32
Direcciones anvcast: Identifican a un conjunto de interfaces de red. El
paquete se enviará a cualquier interfaz que forme parte del conjunto. En
realidad son direcciones unicast que se encuentran asignadas a varias
interfaces.
Direcciones multicast: Identifican a un conjunto de interfaces de la red, de
manera que cada paquete es enviado a cada uno de ellos individualmente.
1.5 PROTOCOLO DE MENSAJES DE CONTROL DE
INTERNET
1.5.1 INTRODUCCIÓN
El software del Protocolo Internet proporciona un servicio de entrega de
datagramas, no confiable y sin conexión, al hacer que cada ruteador direccione
datagramas. Un datagrama viaja de ruteador en ruteador hasta que llega a uno
que lo puede entregar directamente a su destino final. Si un ruteador no puede
rutear o entregar un datagrama, o si el ruteador detecta una condición anormal
que afecta su capacidad para direccionarlo (por ejemplo, congestionamiento de
red), necesita informar a la fuente original para que evite o corrija el problema.
Existe un mecanismo que utilizan los ruteadores y los anfitriones de red de redes
para comunicar la información de control o de error. Los ruteadores utilizan el
mecanismo para reportar problemas y que los anfitriones lo emplean para
comprobar si los destinos son accesibles.
33
1.5.2 PROTOCOLO ICMP
Para permitir que los ruteadores en una red de redes reporten los errores o
proporcionen información sobre circunstancias imprevistas, los diseñadores
agregaron a los protocolos TCP/IP un mecanismo de mensajes de propósito
general. El mecanismo, conocido como Protocolo de Mensajes de Control de
Internet (ICMP), se considera como parte obligatoria del IP y se debe incluir en
todas las implantaciones IP.
Al igual que el resto del tráfico, los mensajes ICMP viajan a través de la red de
redes en la porción de datos de los datagramas IP. Sin embargo, el destino final
de un mensaje ICMP no es un programa de aplicación ni un usuario en la
máquina de destino, sino el software de Protocolo Internet en dicha máquina. Esto
es, cuando llega un mensaje de error de ICMP, el módulo de software ICMP lo
maneja. Por supuesto, si el ICMP determina que un protocolo de un nivel más alto
o un programa de aplicación causaron un problema, notificará al módulo
apropiado. En conclusión:
El Protocolo de Mensajes de Control de Internet permite que los ruteadores
envíen mensajes de error o de control hacia otros ruteadores o anfitriones; el
ICMP proporciona comunicación entre el software del Protocolo Internet en una
máquina y el mismo software en otra.
ICMP fue diseñado para permitir que los ruteadores reporten a los anfitriones las
causas de los errores en la entrega, el ICMP no se restringe sólo a los ruteadores.
Aunque las reglas y normas limitan el uso de algunos mensajes ICMP, cualquier
máquina puede enviar un mensaje ICMP a cualquier otra. Por lo tanto, un anfitrión
puede utilizar el ICMP para comunicarse con un ruteador o con otro anfitrión. La
mayor ventaja de permitir que los anfitriones utilicen el ICMP es que proporciona
un solo mecanismo que se utiliza para todos los mensajes de información y de
control.
34
1.5.3 REPORTE DE ERRORES
Técnicamente, el 1CMP es un mecanismo de reporte de errores. Proporciona un
mecanismo para que los ruteadores que encuentren un error lo reporten a la
fuente original.
Cuando un datagrama causa un error, el ICMP sólo puede reportar la condición
del error a la fuente original del datagrama; la fuente debe relacionar el error con
un programa de aplicación individual o debe tomar alguna otra acción para
corregir el problema.
Un datagrama sólo contiene campos que especifican la fuente original y el último
destino; no contiene un registro completo de su viaje a través de la Internet ( a
excepción de casos inusuales en los que se utiliza la opción de registro de ruta).
Además, como los ruteadores pueden establecer y cambiar sus propias tablas de
ruteo, no existe un conocimiento global de las rutas. Por lo tanto, cuando un
datagrama llega a un ruteador, es imposible conocer el camino que siguió para
llegar hasta ahí. Si el ruteador detecta un problema, no puede saber qué grupo de
máquinas intermedias procesaron el datagrama, así que no puede informarles del
problema. En vez de descartar discretamente el datagrama, el ruteador utiliza el
ICMP para informar a la fuente original que ocurrió un problema, y confía en que
los administradores del anfitrión cooperarán con los administradores de red para
localizarlo y corregirlo.
1.5,4 ENTREGA DE MENSAJES ICMP
Los mensajes ICMP requieren dos niveles de encapsulación como se muestra en
la figura 1.16
35
ENCABEZADOICMP
ENCABEZADODEL DATAG.
ENCABEZADODE LA TRAMA
DATOS ICMP
ÁREA DE DATOS DEL DAT AGRAMA
ÁREA DE DATOS DE LA TRAMA
Fig 1.161 Dos niveles de la encapsulación ICMP. El mensaje ICMP se encapsula en un datagrama
IP que, a su vez, se encapsula en una trama para su transmisión. Para identificar el ICMP, el
campo de protocolo del datagrama contiene el valor 1.
Es Importante tener en mente que aunque los mensajes ICMP se encapsulan y
envían mediante el IP, el ICMP no se considera como un protocolo de nivel más
alto sino como una parte obligatoria del IP. La razón de utilizar el IP para entregar
mensajes ICMP es que quizá necesiten viajar a través de muchas redes físicas
para alcanzar su destino final. Por lo tanto, no se pueden entregar sólo por medio
de transporte físico.
1.5.5 FORMATO DE MENSAJES ICMP
ICMP entrega mensajes de error y de consulta. TCP/IP encapsula cada mensaje
de ICMP en un datagrama IP. El software de la red identifica cada mensaje de
ICMP por dos valores: un valor de Tipo de 8 bits y un valor de Código también de
8 bits. Como muestra la figura 1.17. Estos valores comprenden los dos primeros
campos en el encabezado del mensaje de ICMP:
Redes Globales de Información con Internet y TCP/IP, Douglas E. Comer, Prentice Hall 3ra. Edición 1996, Pag. 128
36
32 Bits
15 i 16 31
Tipo Código Suma de Comprobación
El contenido depende de los valores de tipo y código de ICMP
Fig. 1.171 a) Mensaje del ICMP con los campos del encabezado de ICMP identificados
Datagrama IP^ •'" - • -• w
Encabezado IP Encabezado ICMP Información ICMP
Fig. 1.17 b) Encapsulamiento del ICMP
Inmediatamente después de los bytes de tipo y código, ICMP incluye un campo
de suma de comprobación de 16 bits. La suma de comprobación ayuda al módulo
par de la red a detectar paquetes de datos corrompidos.
Aunque cada mensaje ICMP tiene su propio formato, todos comienzan con los
mismos tres campos; un campo TYPE (TIPO) de mensajes, de 8 bits y números
enteros, que identifica el mensaje; un campo CODE (CÓDIGO), de 8 bits, que
proporciona más información sobre el tipo de mensaje, y un campo CHECKSUM
(SUMA DE COMPROBACIÓN), de 16 bits (el ICMP utiliza el mismo algoritmo
aditivo de suma de verificación que el IP, pero la suma de verificación del ICMP
sólo abarca el mensaje ICMP). Además, los mensajes ICMP que reportan errores
siempre incluyen el encabezado y los primeros 64 bits de datos del datagrama
que causó el problema.
i
Programación en Internet, Hamsa Cris-Cope Ken, McGraw HHJ Ira. Edición 1996. Pag 350
37
La razón del encabezado del datagrama es únicamente para permitir que el
receptor determine de manera más precisa qué protocolo(s) y qué programa de
aplicación son responsables del datagrama.
El campo TYPE (TIPO) de ICMP define el significado del mensaje así como su
formato. Los tipos incluyen:
TIPO
0
3
4
5
8
9
10
11
12
13
14
15
16
17
18
CONSULTA /ERROR
CONSULTA
ERROR
ERROR
ERROR
CONSULTA
CONSULTA
CONSULTA
ERROR
ERROR
CONSULTA
CONSULTA
CONSULTA
CONSULTA
CONSULTA
CONSULTA
TIPO DE MENSAJE ICMP
Respuesta de eco
Destino inalcanzable
Disminución de origen
Redireccionamiento
Solicitud de eco
Anuncio del enrutador
Solicitud del enrutador
Tiempo excedido
Problema de parámetros
Solicitud del registro de hora
Respuesta del registro de hora
Solicitud de información (obsoleta)
Respuesta de información (obsoleta)
Solicitud de máscara de dirección
Respuesta de máscara de dirección
Tabla 1.21 Valores del tipo de mensajes ICMP
Programación en Internet, Hamsa Cris-Cop« Ken, McGraw Huí Ira. Edición 1996, Pag. 350
38
1.5.6. SOLICITUD DE RESPUESTA DE ECO - PING.
Los protocolos TCP/IP proporcionan funciones para ayudar a los administradores
o usuarios de redes a identificar los problemas que ocurran en la red. Una de las
herramientas de depuración más utilizadas incluye los mensajes ICMP de echo
request (solicitud de eco) y echo reply (respuesta de eco). Un anfitrión o un
ruteador envía un mensaje ICMP de solicitud de eco hacia un destino específico.
Cualquier máquina que recibe una solicitud de eco, formula una respuesta y la
regresa al transmisor original. La solicitud contiene un área opcional de datos: la
respuesta contiene una copia de los datos enviados en la solicitud. La solicitud de
eco y su respuesta asociada se pueden utilizar para comprobar si un destino es
alcanzable y si responde. Debido a que tanto la solicitud como la respuesta viajan
en datagramas IP, la recepción exitosa de una respuesta verifica que las piezas
principales del sistema de transporte están funcionando bien.
Primero, el software IP en la computadora de origen debe rutear el datagrama.
Segundo, los ruteadores intermedios entre el origen y el destino deben funcionar
bien y rutear correctamente el datagrama. Tercero, la máquina de destino debe
estar funcionando (al menos debe responder a las interrupciones), y tanto el
software ICMP como el IP deben estar funcionando. Por último, todos los
ruteadores a lo largo del camino de regreso deben tener rutas correctas.
Los mensajes de solicitud y respuesta de eco están entre los mensajes ICMP más
populares que usan algunos programas, como PING (Packet Internet Groper).
Comúnmente, el programa Ping transmite una solicitud de eco, y después mide el
tiempo que tarda en llegar la respuesta. Los administradores de la red y los
usuarios ocupan PING para determinar si un anfitrión remoto está disponible y
accesible en la red en ese momento. La figura 1.18 muestra el formato de los
mensajes de solicitud y respuesta de eco.
39
32 Bits
15 Í 16 31
Tipo Código
Identifícador
Suma de Comprobación
Número de Secuenciabv
Información opcional
Figura 1.1S1 Formato de mensajes de ICMP de solicitud y respuesta de eco (tipos 8 y 0)
Los mensajes de eco de ICMP usan los campos Identificador y Número de
Secuencia para asociar respuestas con solicitudes pero, al igual que los mensajes
de registro de hora y máscara de dirección, pueden almacenar en estos campos
cualquier información que consideren apropiada. Asimismo, el emisor puede
almacenar cualquier información (o nada) en el área Información Opcional. Una
computadora anfitrión que recibe una solicitud de eco actúa como un servidor de
eco: sólo hace eco o devuelve, como mensaje de respuesta de eco, lo que recibe.
1.6 INTERFACE DE PROGRAMA DE APLICACIÓN (API)WINDOWS SOCKETS
1.6.1 PROCESO BÁSICO DE CONEXIÓN DE UN SOCKET
La mayoría de las aplicaciones que se comunican a través de una red, sea la
Internet o una red pequeña de oficina, se valen de los mismos principios y
funciones para llevar a cabo cierta comunicación. Una aplicación reside en una
computadora, esperando que otra establezca una conexión de comunicación.
Esta aplicación "escucha" esta solicitud de conexión, de manera similar a una
persona que está atento al timbre del teléfono cuando espera una llamada.
Programación en Internet, Hamsa Cris - Cope Ken, McGraw Mili 1 ra. Edición 1996, Pag. 352
40
Mientras otra aplicación, que probablemente esté (más no necesariamente) en
otra computadora, intenta comunicarse con la primera aplicación. Este intento por
establecer una conexión es similar a alguien por el teléfono. Si usted marca el
número, esperando que la otra persona esté al pendiente del teléfono al otro lado.
X /<c=
w
L j Acepta la solicitud de conexión
4 /
i=a |
J=^>
CLIENT SERVIDOR(Escucha esperando
conexiones)
Fig. 1.19 Proceso básico de conexión de un socket
Como la persona que hace la llamada, usted tiene que saber el número telefónico
de la persona a la que está llamando. Si no sabe su número, puede buscarlo
mediante e| nombre de la persona. De igual modo, la aplicación que trata de
conectarse con la primera aplicación tiene que saber la ubicación, o dirección, en
la red de dicha aplicación.
Una vez establecida la comunicación entre ambas aplicaciones, se pueden pasar
mensajes entre ellas, de manera análoga a lo que sucede en una conversación
telefónica. Esta conexión es un canal de comunicaciones en dos sentidos, donde
ambos lados envían información como lo muestra la figura 1.19.
Por último, una vez que algún lado, o ambos, ha terminado su conversación, la
conexión se cierra, lo que es equivalente a colgar el teléfono tras hablar con
alguien. Ya cerrada la conexión de un lado, el otro puede detectar esta situación y
cerrar su lado, de igual manera que usted puede saber cuando la persona del otro
L
41
lado de la línea ha colgado el teléfono o la comunicación ha sido interrumpida por
algún medio. Ésta es una explicación básica del funcionamiento de las
comunicaciones de red entre dos o más aplicaciones.
1.6.2 INTRODUCCIÓN A WINSOCK
En una conversación en red dos procesos en computadoras anfitrión separadas
intercambian información. Los profesionales en redes llaman extremo a cada lado
de esta conversación.
Un socket es una representación abstracta de un extremo (el punto último dentro
del extremo) en una red. En los años ochenta, investigadores de la Universidad
de California en Berkeley usaron este modelo de sockets para desarrollar una
Interface de Programas de Aplicación (API, Application Program Interface) para
redes TCP/IP. Una API es un grupo de funciones que emplean los programadores
a fin de desarrollar aplicaciones para un ambiente de cómputo específico. La
Interface de Berkeley es sólo una implementacíón de una API basada en el
modelo de sockets.
El software llamado Windows Sockets comúnmente conocido como Winsock
también es una API basada en el paradigma de sockets. De hecho sus
desarrolladores derivaron esta API de la Interface de sockets de Berkeley. Sin
embargo, mientras la interface de Berkeley es una API que pueden usar los
programadores con múltiples sistemas operativos, la API Winsock se dirige
específicamente a la familia de sistemas operativos de Microsoft Windows, que
incluye Microsoft Windows, Windows 95T WindowsNT y ahora Windows Milenium,
Windows 2000 y Windows XP.
Winsock incluye muchas de las funciones de Berkeley desarrolladas para UNIX
(Sistema operativo para el cual los investigadores de Berkeley diseñaron al
principio la Interface de sockets), así como extensiones específicas de Windows
42
que permiten a los programadores aprovechar el ambiente manejado con
mensajes de ese entorno operativo.
Durante la época de Windows 3.x, antes de que la conectividad se integrara en el
sistema operativo Windows, se podían comprar a varias compañías diferentes los
protocolos de red necesarios para la comunicación de red. Cada una de ellas
tenía una manera ligeramente diferente para que una aplicación llevara a cabo
sus comunicaciones de red. Como resultado, cualquier aplicación que realizara
comunicaciones de red tenía una lista de software de conectividad con el que
podía trabajar. Muchos desarrolladores de aplicaciones no estaban contentos con
esta situación. Como resultado, todas las compañías de redes, incluyendo
Microsoft, se juntaron para desarrollar la API Winsock (Windows Sockets). Ésta
proporcionó a los desarrolladores de aplicaciones una API consistente con la que
se podían realizar todas las comunicaciones de red, sin importar el software de
red que se empleará.
Cuando se quiere leer o escribir un archivo, debe valerse de un objeto de archivo
para apuntar a dicho archivo. Un socket es un objeto que sirve para leer y escribir
mensajes que viajan entre aplicaciones.
Establecer una'conexión con otra aplicación mediante un socket requiere de un
grupo de información distinto que simplemente abrir un archivo. Para abrir un
archivo, necesita saber su nombre y ubicación. Para establecer una conexión de
socket, necesita saber cuál es la computadora en la que se está ejecutando la
otra aplicación y el puerto por el que escucha.
Un puerto es como una extensión telefónica y la dirección de la computadora es
como el número telefónico. Para llamar a alguien en un gran edificio de oficinas,
puede llamar al número principal, pero luego necesita especificar el número de
extensión. De igual manera, los puertos sirven para enrutar las comunicaciones
de red como se muestra en la figura 1.20. Como sucede con el número telefónico,
hay medios para buscar el número de puerto, si no sabe cuál es el que necesita,
43
pero esto requiere que su computadora esté configurada con la información
acerca de cuál es el puerto por el que la aplicación de conexión está escuchando.
Si especifica una dirección o puerto equivocado, podría conectarse a una
aplicación distinta; al hacer una llamada telefónica, otra persona contestaría la
llamada. Es posible que usted no reciba una respuesta, si no hay ninguna
aplicación escuchando del otro lado.
Sólo una aplicación puede estar escuchando en un puerto específico de una
computadora. Aunque varias aplicaciones pueden escuchar a la espera de
solicitudes de conexión en la misma computadora, cada una de ellas debe
escuchar en un puerto diferente.
La intefaz de redde una
computadorautiliza puertos desocket para dirigirlos mensajes de lared a la aplicación-
correcta.
Fig 1.201 Los puertos sirven para enrular las conexiones de red a la aplicación correcta.
Aprendiendo Visual C-H-6 en 21 Días, Da vis Chapman, Prentíce Hall Ira. Edición 1999, Pag. 499
L
44
1.6.3 DEFINICIÓN DE SOCKET
Un socket es una representación abstracta del extremo (endpoint) en un proceso
de comunicación. Para que se dé la comunicación en una red, el programa
requiere un socket en cada extremo del proceso de comunicación.
Para crear un socket, se utiliza la función socket, que devuelve un identificador de
socket. Se deben especificar tres parámetros:
socket = socket(protocol_familiy, socket_type, protocol)
• Familia de Protocolos (Protocol Family): Identifica a una familia de
protocolos relacionados, como TCP/IP.
Se utilizan constantes para definir a las familias de protocolos como: PFJNET
(familia de protocolos Internet).
• Tipo de Socket (Socket__type) : Si el programa utilizará el socket para
transmitir flujo de bytes o datagramas.
SOCK_DGRAM para datagramas y SCK_STREAM para flujo de bytes.
La interface de sockets también define un tercer tipo de comunicación llamada
socket básico (raw socket) SOCK_RAW, que permite a una aplicación utilizar los
mismos protocolos de nivel inferior que la red utiliza comúnmente.
• Protocolo a utilizar: Permite especificar que protocolo utilizará el socket.
IPPROTOJTCP , IPPROTOJJDP
Ej: socketjiandle = socket(PFJNET, SOCK_STREAM, IPPROTO_TCP);
Cuando se llama a la función socket, la ¡mplementación del socket (o crea y
devuelve un identificador de socket que identifica a un registro en la tabla de
descripción. El registro muestra la estructura de datos del socket.
45
1.6.4 ESTRUCTURA SIMPLE DE DATOS DE UN SOCKET.
Tabla de índice de descripción Estructura de datos del socket
0
12
3
4
5
Apuntador a una estructura
•
•
w Familia de protocolos
Tipo de servicio
Dirección IP local
Dirección IP remota
Puerto de protocolo local
Puerto de protocolo remoto
Figl.21 Estructura simple de datos de un socket.
Cada vez que la aplicación llama a la función socket, la implementación de éste
reserva memoria para una nueva estructura de datos y almacena la dirección de
la familia, el tipo.de socket y el protocolo.
Entonces una conexión de red entre dos procesos se compone de cinco
elementos
• Un puerto de protocolo local que especifica donde recibe mensajes un
proceso.
• La dirección del anfitrión o host local, la cual identifica al anfitrión que recibirá
los paquetes de datos.
• Un puerto de protocolo remoto que identifica al proceso destino.
Programación en Internet, Hamsa Cris -Cope Ken, McGraw Hill Ira. Edición 1996. Pag 162
46
• La dirección del anfitrión remoto, que identifica al anfitrión destino.
• Un protocolo, que define como los procesos transfieren la información a través
de la red.
Cuando un proceso desea establecer una comunicación con otro, el proceso
emisor transmite la información al socket y la API de sockets maneja la interface
con la pila de protocolos TCP/IP.
\
"41
La estructura de datos del socket incluye elementos para almacenar valores de
los parámetros de la función socket. Sin embargo, también contiene elementos
para cuatro direcciones: IP local, IP remota, puerto local y puerto remoto. Cada
vez que el programa llama a la función socket, la ¡mplementación del socket
reserva memoria para una nueva estructura de datos y almacena la dirección de
la familia, el tipo de socket y el protocolo. En la tabla de descripción de archivos la
implementación del socket guarda un apuntador para la estructura de datos. El
identificador que cierto programa recibe de la función socket es un índice dentro
de la tabla de descripción.
1.6.5 CONFIGURACIÓN DE UN SOCKET
Una vez creado el socket, utilizando la función socket, se pueden utilizar las
funciones de configuración dependiendo del uso que se le vaya a dar al socket:
Si se trata de un cliente orientado a conexión se deberá llamar a la función
connect que se encargará de almacenar toda la información local y remota en la
estructura de datos del socket.
Si se trata de un cliente sin conexión las funciones llamadas son:
Máquina Local: bind Máquina remota: sendto
En el caso de un servidor orientado a conexión:
Máquina Local: bind Máquina Remota: listen y accept
47
En el caso de un servidor sin conexión:
Máquina Local: bind Máquina Remota: recvfrom
1.6.6 CONEXIÓN DE UN SOCKET
Un programa cliente orientado a conexión utiliza la función connect para
configurar un socket, y requiere como parámetros, el identificador de socket, que
es el valor del descriptor del socket que devolvió la función socket. Como segundo
parámetro, utiliza la dirección del socket remoto, es decir la dirección IP del host
remoto y el puerto de protocolo. El tercer parámetro se refiere a la longitud de la
dirección, el tamaño en bytes de la dirección del socket remoto.
result = connect(socket__handle, remote_socket_address, addressjength);
En la mayoría de los casos un programa cliente orientado a conexión no
especifica puerto de protocolo local, ya que puede recibir datos en cualquier
puerto de protocolo. Es decir, no es necesario almacenar las direcciones IP
locales, la implementación del socket lo hace automáticamente y selecciona por si
misma un puerto de protocolo local.
En el caso de clientes no orientados a conexión o servidores en general tienen
que atender a un puerto de protocolo las solicitudes que les pueden llegar.
La función de asignación de nombres, bind, en la API de sockets permite a un
programa asociar una dirección local con un socket:
Result = bind(socket_handle, local_socket_address, addressjenght);
De esta manera se le comunica a la implementación del socket, qué puerto de
protocolo utilizar para la entrega de datos.
48
1.6.7 TRANSMISIÓN DE DATOS
Se proporcionan cinco funciones para transmitir datos a través de un socket y se
dividen en dos grupos. Existen tres funciones que requieren una dirección de
destino como parámetro, las restantes que son las utilizadas en los procesos
orientados a conexión, no lo precisan.
FUNCIÓN
Send
Write
Writev
Sendto
Sendmsg
DESCRIPCIÓN
Transmite datos a través de un socket de conexión.
Transmite datos a través de un socket de conexión
utilizando un bufer de datos simple.
Transmite datos a través de un socket de conexión
utilizando bloques de memoria no contiguos.
Transmite datos a través de un socket sin conexión
utilizando un bufer de mensajes simple.
Transmite datos a través de un socket sin
conexión, utilizando una estructura de mensajes
flexible como bufer de mensajes
Tabla 1.31 Funciones para Transmitir Datos a través de un socket
Las funciones del API de sockets que hacen transmisiones de datos orientadas a
conexión no requieren que el programa especifique una dirección destino como
parámetro. Las funciones send, write y writev sólo trabajan con sockets
conectados, y tiene la siguiente estructura:
Result = write(socket_handle, message_buffer, bufferjength);
Programación en Internet, Hamsa Cris- Cope Ken, McGraw Ilill Ira. Edición 1996, Pag. 167
49
El primer parámetro es el ¡dentificador de socket, el segundo es el búfer de
mensajes, que apunta al búfer de datos que contiene la información a transmitir.
El tercer parámetro es el tamaño del búfer de datos.
por otro lado la función writev no requiere que los datos ocupen bloques de
memoria contiguos como si lo hace la función write. Así writev permite que se
especifique una tabla de direcciones que contenga los datos.
Result = writev(socket_handle, io_vector, vectorjength);
También requiere como primer parámetro, un identificador de socket, el segundo
parámetro especifica la dirección de una tabla que contiene una secuencia de
apuntadores. Cuando la función writev transmita los datos, enviará la información
contenida en cada localidad de memoria especificada por el array de
apuntadores, transmitiéndolos en el mismo orden en que aparecen en el array.
La función send es otra función del interface de sockets para utilizar con sockets
orientados a conexión:
Result = send(socket(socket_handle), message_buffer, bufferjength,
special_flags);
Con send se pueden especificar banderas opcionales para controlar la
transmisión, como la gestión de datos urgentes (fuera de banda).
Las tres funciones write, writev y send, devuelven un valor entero, que es el
numero de bytes transmitidos por el socket. En caso de que exista un error
devuelven: -1.
50
1.6.8 SOCKETS SIN CONEXIÓN
para enviar datos a través de un socket sin conexión se tienen las funciones,
sendto y sendmsg \t = sendto(socket_handle, message_buffer, bufferjength,
special_flags, socket_address__structure, address_structurejength);
Requiere 6 parámetros, entre los nuevos que aparecen ahora la dirección de
destino (socket_address_structure), y la longitud de la misma en bytes
(address_structurejength).
La función sendmsg nos permite utilizar para la transmisión una estructura de
mensaje, en lugar de un simple buffer de datos. Requiere como parámetros un
identificador de socket, un puntero a la estructura del mensaje
(message_structure) y banderas (special_flags).
Result= sendmsg(socket_handle, message_structure, special_flags);
1.6.9 RECEPCIÓN DE DATOS POR UN SOCKET
La Interface de Sockets, incluye 5 funciones para la recepción de datos, que se
corresponden con las 5 funciones anteriores vistas en la transmisión de datos:
51
Send
Write
Writev
Sendto
Sendmsg
Recv
Read
Readv
Recvfrom
Recvmsg
Tabla 1.41 Funciones para la recepción de Datos
A parte de estas correspondencias, hay que tener en cuenta que no es
indispensable utilizarlas unas con otras, ya que una vez se han enviado datos,
para recibirlos se puede realizar con cualquiera de las funciones correspondientes
al tipo de servicio, orientado o no a conexión.
1.6.9.1 Descripción del Proceso
El programa servidor solicita a la implementación del socket que le asigne una
estructura de datos para el socket y que le devuelva un descriptor de sockets para
utilizarlo en las siguientes llamadas a funciones de la interfaz de sockets.
Después el servidor une el socket a un puerto de protocolo local. La función listen
indica al socket que atienda las conexiones entrantes y que confirme las
solicitudes de conexión, se encarga de poner al socket en modo de atención
pasiva.
Result = listen(socket_handle, queuejength);
Programación en Internet, Hamsa Cris - Cope Ken, McGraw Hill Ira. Edición 1996, Pag. 170
52
Donde el segundo parámetro (queuejength), nos permite especificar el número
máximo de solicitudes que pueden acumularse en la cola.
Después de configurar una cola de datos entrantes, el programa servidor llamará
a la función accept, cesa su actividad y espera una solicitud de conexión de un
programa cliente.
Result = accept (socketjiandle, socket_address, addressjength);
El programa cliente también crea un socket, pero no necesita ocuparse de que
dirección local usará el protocolo ya que utiliza un protocolo orientado a conexión,
por lo tanto no llama a la función blnd. Lo que hace es iniciar la conversación en
red llamando a la función connect.
Después de que el cliente y el servidor establecen la conexión, pueden ocurrir
comunicaciones adicionales a través de las funciones wríte y read.
1.6.10 REVISIÓN DE LAS FUNCIONES DE LA API WINDOWS SOCKETS
El software llamado Windows Sockets o Winsock es una API (Application Program
Interface) , Interface de programas de aplicación para redes TCP/IP, y específica
de la familia de sistemas operativos de Microsoft Windows en todas sus
versiones.
Windows Sockets implementa la interface de sockets como una biblioteca de
enlace dinámico, una DLL (Dynamic Lynk Library), que no es más que un módulo
ejecutable que el sistema puede cargar en cualquier momento.
La API Winsock proporciona una biblioteca de funciones que se divide en tres
grupos:
53
• Funciones de los Berkeley Sockets.
• Funciones de Bases de Datos que permiten obtener información relacionada
con el DNS, servicios de comunicaciones y protocolos.
• Las extensiones específicas de Windows a las rutinas de los Sockets de
Berkeley.
Distinguimos entre las funciones de bloqueo, que son aquellas que evitan que se
llame a cualquier otra función hasta que esta termine sus propias operaciones de
red. Y las de no bloqueo que terminan de inmediato o emiten un mensaje de
error.
1.6.10.1 Funciones Socket
Función
Accept
Closesocket
Connect
Recv
Recvfrom
Select
Send
Sendto
Descripción
Confirma una conexión de entrada. Crea un socket
nuevo y lo conecta al host remoto que pidió la
conexión. Devuelve el socket original a su estado de
atender
Cierra un extremo de una conexión por sockets.
Inicia una conexión en el socket especificado.
Recibe información de un socket conectado.
Recibe información de un socket conectado o de uno
no conectado.
Ejecuta multiplexaje síncrono de E/S al monitorear el
estado de múltiples sockets.
Envía información a un socket conectado.
Envía información a un socket conectado o a uno no
conectado.
Tabla 1.51 Funciones Sockets de Bloqueo
Programación en Internet, Harina Cris - Cope Ken, McCrawHÜI Ira. Edición 1996, Pag. 183
54
Función
Bind
Getpeername
Getsockname
Getsockopt
Htonl
Htons
lnet_addr
lnet_ntoa
loctlsocket
Listen
Ntohl
Ntohs
Setsockopt
Shutdown
Socket
Descripción
Asigna un nombre local a un socket sin nombre.
Obtiene el nombre del par conectado al socket
especificado.
Obtiene el nombre local para el socket especificado.
Obtiene opciones asociadas con el socket
especificado.
Convierte un número de 32 bits de ordenamiento de
byte de anfitrión a ordenamiento de byte de red.
Convierte un número de 16 bits de ordenamiento de
byte de anfitrión a ordenamiento de byte de red.
Convierte una cadena de caracteres que representa
una dirección IP en notación decimal al valor binario
de 32 bits.
Convierte una dirección IP a notación decimal.
Controla varios parámetros relacionados con la forma
de operar del socket y el manejo de la E/S de red.
Indica a un socket específico que atienda las
conexiones entrantes.
Convierte un número de 32 bits de ordenamiento de
byte de red a ordenamiento de byte de anfitrión.
Convierte un número de 16 bits de ordenamiento de
byte de red a ordenamiento de byte de anfitrión.
Almacena opciones asociadas con el socket
especificado.
Cierra parte de una conexión full dúplex.
Crea un extremo para la comunicación y devuelve un
identificador de socket.
Tabla 1.61 Funciones Sockets de No Bloqueo
Programación en Internet, Hamsa Cris-Cope Ken, McGraw Hill Ira. Edición 1996, Pag. 184
55
Las funciones vistas en la tabla 1.5, se pueden clasificar como de bloqueo porque
requieren comunicación con el anfitrión remoto. Mientras que las que aparecen en
la tabla 1.6, sólo utilizan información almacenada de manera local, o bien sólo
trabajan con el extremo de una conexión del socket de su computadora.
1.6.10.2 Funciones de Base de Datos
Función
Gethostbyaddr
Gethostbyname
Gethostname
Getprotobyname
Getprotobynumber
Getservbyname
Getservbyport
Descripción
Obtiene nombre de dominio y dirección IP
correspondiente a una dirección de red.
Obtiene nombre de dominio y dirección IP
correspondiente a un nombre de anfitrión.
Obtiene el nombre de dominio del anfitrión
local.
Obtiene un protocolo por nombre y devuelve
el nombre oficial y el número definido para
representar al protocolo.
Obtiene el nombre y número de protocolo
representado por un número específico.
Obtiene un nombre de servicio y el puerto de
protocolo correspondiente al nombre del
servicio.
Obtiene el nombre del servicio y el puerto
correspondiente a un puerto de protocolo
especifico.
Tabla 1.71 Funciones de Bases de Datos
Programación en Internet, Hamsa Cris - Cope Ken, McGraw HUÍ Ira. Edición 1996, Pag. 185
56
Las funciones de base de datos de Winsock, permiten obtener información sobre
nombres de dominio, servicios de comunicación y protocolos.
Algunas de las funciones de bases de datos de Winsock devuelven estructuras de
datos volátiles, ya que sólo guardan los resultados hasta la próxima llamada a
otra función Winsock, por lo tanto estos resultados debe guardarse en un lugar
diferente de la memoria. Para ello tenemos las versiones asincronas de estas
funciones que nos permiten aprovechar el despliegue de mensajes dentro de
Windows.
WSAAsyncSelect
WSACancelAsyncRequest
WSACancelBIockingCall
WSACIeanup
WSAGetLastError
WSAIsBIocking
WSASetLastError
WSAStartup
WSAUnhookBlockingHook
Ofrece una versión asincrona de la
función Select.
Cancela una instancia de la función
WSAAsyncGetXByY
Cancela una llamada de bloqueo de la
API
Termina sesión desde los DLL
subyacentes de Winsock
Obtiene detalles sobre el último error de
la API Winsock.
Determina si el DLL de Winsock
subyacente está bloqueado.
Establece el regreso de error para
WSAGetLastError subsecuente.
Inicia el DLL de Winsock subyacente.
Restaura la función original de bloqueo.
Tabla 1.81 Funciones de Bases de Datos Asincronas
Programación en Internet, Hamsa Cris - Cope Ken, McGraw Hill Ira. Edición 1996, Pag. 186
57
1.7 PROGRAMACIÓN CON WINDOWS SOCKETS
Los programas de red basados en la API Windows Sockets deben incluir un
encabezado de archivo llamado winsock.h :
#¡nclude<winsock.h>
La API de Windows Sockets requiere dos funciones especificas de Windows, que
son:
WSAStartup: Se debe llamar a esta función antes de llamar a cualquier otra de
Winsock. Nos permite especificar que versión de la API Windows Sockets va a
necesitar nuestro programa. Se establece una negociación entre la aplicación y
Winsock.dll.
WSACIeanup: Se debe colocar por cada llamada que se haga a WSAStartup.
Cuando se llama a la función WSACIeanup por última vez, Winsock desconecta
cualquiera de los sockets de flujo de bytes existentes. Aunque respeta la
información pendiente.
1.7.1 DESCRIPTOR DE SOCKET
Winsock define SOCKET como un tipo de datos sin signo y emplea la constante
INVALID__SOCKET para identificar a los no válidos.
Un socket válido está en el rango desde O INVALID SOCKET -1 .
Para el caso de que ocurra un error de socket, Winsock nos proporciona la
constante SOCKET_ERROR, que define como ~-1, y para identificar la condición
concreta del error nuestra aplicación deberá llamar a la función WSAGetLastError,
que se encarga de obtener el último error que ocurrió en la red.
58
1.7.1.1 Función Select
Esta función deja que un solo proceso monitoree o determine el estado de
múltiples sockets. Un conjunto es una lista específica de sockets que Winsock
monitorea para revisar los cambios de estado. Para manipular estos conjuntos
Winsock se vale de las siguientes macros:
i
Macro
FD_CLR
FDJSSET
FD_SET
FD_ZERO
Función
Borra un identificador de socket de la lista.
Devuelve un valor diferente de cero (TRUE)
si el identificador de socket está establecido
y cero (FALSE) si no lo está.
Agrega un identificador de socket a una
lista.
Inicializa un conjunto de identificadores.
Tabla 1.91 Macros para manipular et estado de un sockets
Winsock proporciona una versión asincrona de SELECT , WSAAsyncSelect para
las operaciones de socket de no bloqueo en Winsock.
Una aplicación puede llamar a la función WSAAsyncSelect para cambiar la
operación del socket de bloqueo a no bloqueo. Teniendo en cuenta que
WSAAsyncSelect sólo acepta un identificador de socket a la vez como parámetro.
WSAAsyncSelect (SOCKET s, HWND hWnd, unsigned int wMsg, long
lEvent);
Programación en Internet, Hamsa Cris- Cope Ken, McGraw HUÍ Ira. Edición 1996, Pag. 204
59
El parámetro lEvent es una máscara de bits que especifica que combinación de
eventos de la red se desean revisar. Sus valores pueden ser:
Constante
FD_READ
FD_WRITE
FD_OOB
FD_ACCEPT
FD_CONNECT
FD_CLOSE
Significado
Solicita notificación de que está listo
para leer.
Solicita notificación de que está listo
para escribir.
Solicita un aviso de la llegada de
información fuera de banda.
Solicita un aviso de las conexiones
entrantes.
Solicita un aviso de las conexiones
terminadas.
Solicita un aviso de la terminación de
socket.
Tabla 1.101 Valores del Parámetro lEvent de WSAAsyncSelect
El segundo parámetro hWnd especifica el identifícador de la ventana que recibirá
el mensaje, (parámetro wMsg)
El tercer parámetro wMsg, define el mensaje que usted quiere que envíe
Windows cuando el evento especificado ocurra en la red.
Cuando se llama a la función WSAAsyncSelect, Winsock designa al socket que se
especifica como de no bloqueo. Por ejemplo si se quiere realizar una operación
usando la función recv, evitando operaciones de bloqueo. Se llamará a la función
WSAAsyncSelect, que se encargará a su vez de decirle a Windows que notifique
Programación en Internet, Hamsa Cris-Cope Ken, McGraw HÍII Ira. Edición 1996, Pag. 211
60
a la aplicación en cuestión cuando el socket está listo para leer. Cuando el socket
recibe la información, Windows enviará el identificador de mensaje
correspondiente a la ventana que especifique la función WSAAsyncSelect.
Cuando el procedimiento de manejo del mensaje para esa ventana reciba el
mensaje, la aplicación podrá ejecutar un código que llame a la función recv.
1.7.1.2 Hook de bloqueo
Winsock nunca permite que una operación de bloqueo ocurra dentro de Windows.
Cuando un programa llama a una función que causaría una operación de este
tipo, Winsock entra en un ciclo y llama de forma repetitiva a un identificador de
bloqueo o rutina hook, cuyo propósito es interceptar las llamadas a funciones que
causan una operación de bloqueo.
El identificador de bloqueo estándar de Winsock incluye un código análogo a las
siguientes instrucciones :
If (peekMessage(&msg, NULL, O, O, PM_REMOVE))
{TranslateMessage(&msg);
DispatchMessage(&msg);
La función PeekMessage revisa la cola de mensajes de la aplicación, en caso de
que existan mensajes, lo coloca en una estructura MSG y devuelve un valor que
no sea cero.
De todas formas el hook de bloqueo no resuelve el problema en su totalidad, ya
que cuando se ejecuta es posible que aparezca un mensaje de Windows para la
tarea en curso, que puede causar que la aplicación llame a otra función de
Winsock. Con lo cual se tiene que siempre que una operación de bloqueo de
61
VVinsock esté en progreso, no se podrá llamar desde la aplicación a otras
funciones de Winsock.
Winsock proporciona dos funciones para detectar y manejar operaciones de
bloqueo:
Ninguna de las funciones requiere parámetros.
• WSAIsBlockinq: Se llama a esta función para determinar si está en
progreso una operación de bloqueo. Devolverá TRUE si es así y FALSE,
en caso contrario.
• WSACancelBIockíngCall: Se llamará a esta función para cancelar la
operación de bloqueo que esté en curso. La llamada a la función que inició
la operación de bloqueo coge el valor de error WSAEINTR.
La API de Winsock incluye dos funciones avanzadas para manejar las
operaciones de bloqueo:
• WSASetBIockíngHook: Nos permite definir nuestra propia rutina de bloqueo.
• WSÁUnhookBlockinhook: Se encarga de restaurar el hook de bloqueo
predeterminado.
Para los sistemas operativos Windows95 y WindowsNT, el bloqueo ocurre en
base a cada tarea. Winsock no incluye un hook de bloqueo para las versiones
multitarea de Windows, cuando sucede una operación de bloqueo todas las
demás actividades en las tareas se detienen hasta que esta concluye. De todas
62
formas Winsock permite utilizar en tales versiones de Windows la función
WSASetBIockingHook para implementar nuestro propio hook de bloqueo.
1.7.2 POSICIONES DE WINSOCK DENTRO DEL AMBIENTE WINDOWS
La capa superior de comunicación mostrada en la figura 1.22, es proporcionada
por un proveedor de Winsock, esta capa se sitúa entre un programa basado en
Windows y WINSOCK.DLL. La capa superior de comunicación puede ser una
llamada de procedimiento remoto (RPC, Remote Procedure Cali) o cualquier otro
programa que proporcione un servicio similar.
RPC es una interface que permite que un programa llame a un procedimiento que
reside en una computadora remota. Los programas usan extensivamente las
funciones y procedimientos. Cuando un programa llama a una función, por lo
general el usuario pasa parámetros a esa función. Casi siempre las instrucciones
de función están contenidas dentro del código de un programa o dentro de un
archivo DLL de Windows. No obstante, en caso de una llamada de procedimiento
remoto, el código de la función reside en una computadora diferente. Suponga
que se desarrolla programas en una red de área local (LAN) que ejecuta
protocolos TCP/IP. Dentro de ella, una computadora remota puede incluir una
implementación de Winsock, Conforme se ejecutan los programas basados en
Internet, deben llamar a los procedimientos localizados en WINSOCK.DLL. En
este caso, puesto que DLL reside en una computadora remota, el programa debe
hacer una llamada de procedimiento remoto.
Una interface RPC permite a un programa llamar a procedimientos en módulos
de código que no residen en la computadora local, por ejemplo, los módulos de
código como las DLL que pueden residir en la computadora central de una red.
Microsoft incluye productos RPC en sus sistemas operativos avanzados
(Windows NT y Windows 95). En la mayoría de los casos, el hecho de que un
programa invoque a un procedimiento remoto será claro para el usuario, así
como para el programador. En consecuencia, los programas llaman a una función
63
remota como llamarían a cualquier función residente en una computadora local.
La interface RPC, a su vez, mapea de manera transparente la llamada a la
función a través de la red.
Aplicación de Windows.
RPC o alguna otra capa de comunicación de nivel superior
IWINSOCK.DLL
Pila de protocolos TCP/IP
Controlado! de paquete ODI o NDIS
Bus de datos de la red
HARDWARE
Controlador de interface de red
Líneas Telefónicas
Protocolo SLIP o PPP
SOFTWARE
Tarjeta de interface de red
Controlador de puerto serial
Módem
Figura 1.221 Posición de Winsock dentro del ambiente Windows
WINSOCK.DLL se sitúa entre la pila de protocolos TCP/IP y las aplicaciones del
usuario, esto es, Winsock maneja la interface con los protocolos TCP/IP.
Programación en Internet, Hamsa Cris- Cope Ken, McGraw Hill Ira. Edición 1996, Pag. 187
64
1.8 APLICACIÓN DEL ENTORNO DE DESARROLLO DE
VISUAL C++ PARA MANEJO DE APLICACIONES CON
SOCKETS
1.8.1 PROGRAMACIÓN ORIENTADA A OBJETOS CON VISUAL C++
La frase orientado(a) a objetos se ha vuelto muy popular en los últimos años, se
habla de sistemas operativos orientados a objetos, lenguajes orientados a
objetos, programación orientada a objetos (POO), etcétera. Sin embargo, el
concepto surgió hace ya 25 años con la creación del lenguaje Simula; su
redescubrimiento y creciente popularidad se deben a C++, lenguaje creado por
Stroustrup y basado en un lenguaje ampliamente utilizado como es C. El objetivo
de este capítulo es presentar los principales conceptos involucrados en la POO
así como la forma de implementarlos en Visual C++ para crear el programa que
nos permitirá monitorear a dispositivos configurados con TCP/IP utilizando
Winsockets.
Las siguientes definiciones caracterizan una programación orientada a objetos:
1. Abstracción
2. Encapsulación
3. Medularidad
4. Jerarquización
5. Tipificado
6. Concurrencia
7. Persistencia
Las cuatro primeras características son esenciales, mientras que las tres últimas
son útiles y complementan el modelo.
65
1.8.1.1 Abstracción
Denota las características esenciales que distinguen a un objeto de otros tipos de
objetos, definiendo precisas fronteras conceptuales, relativas al observador.
• Surge del reconocimiento de similaridades entre ciertos objetos,
situaciones o procesos en el mundo real.
• Decide concentrarse en estas similaridades e ignorar las diferencias.
• Enfatiza detalles con significado para el usuario, suprimiendo aquellos
detalles que, por el momento, son irrelevantes o distraen de lo esencial.
• Deben seguir el "principio de mínimo compromiso", que significa que la
interface de un objeto provee su comportamiento esencial, y nada más que
eso. Pero también el "principio de mínimo asombro": capturar el
comportamiento sin ofrecer sorpresas o efectos laterales.
1.8.1.2 Encapsulación
Es el proceso de compartimentalización de los elementos de una abstracción que
constituyen su estructura y comportamiento. La encapsulación sirve para separar
la interface de una abstracción y su implementación.
Es un concepto complementario al de abstracción.
La encapsulación esconde la implementación del objeto que no contribuye
a sus características esenciales.
La encapsulación da lugar a que las clases se dividan en dos partes:
1. Interface: captura la visión externa de una clase, abarcando la
abstracción del comportamiento común a los ejemplos de esa clase.
2. Implementación: comprende la representación de la abstracción, así
como los mecanismos que conducen al comportamiento deseado.
Se conoce también como ocultamiento o privacidad de la información.
66
1.8.1.3 Medularidad
Es la propiedad que tiene un sistema que ha sido descompuesto en un conjunto
de módulos cohesivos y vagamente conexos.
Cada módulo se puede compilar separadamente, aunque tengan
conexiones con otros módulos.
En un diseño estructural, modularización comprende el agrupamiento
significativo de subprogramas. En diseño orientado a objetos, la
modularización debe ceñirse a la estructura lógica elegida en el proceso de
diseño.
Dividir un programa en componentes individualizados reduce en alguna
manera su complejidad.
En C++ se separan los módulos interface de los módulos con
implementación, estando los primeros en ficheros con extensión .h
llamados header files, mientras que los segundos se almacenan en
ficheros con extensión .c, .ce, ,cp o .cpp. La dependencia entre ficheros se
realiza a través de la macro #include.
1.8.1.4 Jerarquización
Es una clasificación u ordenación de las abstracciones.
• Por jerarquía denotamos el orden de relación que se produce entre
abstracciones diferentes.
• Los tipos de jerarquía más útiles:
1. Herencia: (generalización/especialización, padre/hijo, jerarquía del
tipo "es un"...). Una clase (subclase) comparte la estructura o
comportamiento definido en otra clase, llamada superclase.
2. Herencia múltiple: Una clase comparte la estructura o
comportamiento de varias superclases.
3. Agregación: Comprende relaciones del tipo "es parte de" al realizar
una descomposición.
67
1.8.1.4.1 Relaciones entre los conceptos asociados al modelo de objetos
• Los conceptos de abstracción y encapsulación son conceptos
complementarios: abstracción hace referencia al comportamiento
observable de un objeto, mientras encapsulación hace referencia a la
implementación que la hace alcanzar este comportamiento.
• Existe una tensión entre los conceptos de encapsulación de la información
y el concepto de jerarquía de herencia, que requiere una apertura en el
acceso a la información.
• C++ Ofrece mucha flexibilidad, pudiendo disponer de tres compartimentos
en cada clase:
1. Privado: declaraciones accesibles sólo a la clase (completamente
encapsulado)
2. Protegido: declaraciones accesibles a la clase y a sus subclases.
3. Público: declaraciones accesibles a todos los clientes.
Además de estos tres tipos, soporta la definición de clases cooperativas a
las que se les permite acceder a la parte privada de la implementación.
Estas clases se denominan fríends.
1.8.1.5 Tipificado
Tipificar es la imposición de una clase a un objeto, de tal modo que objetos de
diferentes tipos no se puedan intercambiar, o se puedan intercambiar solo de
forma restringida.
• Tipo es una caracterización precisa de las propiedades estructurales y de
comportamiento que comparten una colección de entidades.
• Grosso modo, tipo y clase pueden considerarse sinónimos.
• Existen lenguajes fuertemente tipificados (Ada) y débilmente tipificados.
Estos últimos soportan polimorfismo, mientras que los fuertemente
tipificados no.
68
1.8.1.6 Concurrencia
Es la propiedad que distingue un objeto activo de uno no activo. Concurrencia
permite que diferentes objetos actúen al mismo tiempo, usando distintos threads
de control.
1.8.1.7 Persistencia
Es la propiedad por la cual la existencia de un objeto trasciende en el tiempo (esto
es, el objeto sigue existiendo después de que su creador deja de existir) o en el
espacio (esto es, la localización del objeto cambia respecto a la dirección en la
que fue creado).
1.8.2 CLASES Y OBJETOS
1.8.2.1 Objetos
• Un objeto es una cosa tangible, algo a que se puede aprehender
intelectualmente o algo hacia lo que se puede dirigir una acción o
pensamiento.
• Un objeto representa un Ítem individual e identificable, o una entidad real o
abstracta, con un papel definido en el dominio del problema
• Un objeto tiene:
1. Estado
2. Comportamiento
3. Identidad
La estructura y el comportamiento de objetos similares se definen en sus clases
comunes. El término objeto y ejemplo (instance) de una clase son
intercambiables.
69
1.8.2.1.1 Estado de un Objeto
El estado de un objeto abarca todas las propiedades del objeto, y los valores
actuales de cada una de esas propiedades. Las propiedades de los objetos
suelen ser estáticas, mientras los valores que toman estas propiedades cambian
con el tiempo.
• El hecho de que los objetos tengan estado implica que ocupan un espacio,
ya en el mundo físico , ya en la memoria del ordenador.
• El estado de un objeto está influido por la historia del objeto.
• No deben confundirse los objetos, que existen en el tiempo, son mutables,
tienen estado, pueden ser creados, destruidos y compartidos, con los
valores (los asignados a una variable, por ejemplo) que son cantidades con
las propiedades de ser atemporales, inmutables.
• El estado de un objeto representa el efecto acumulado de su
comportamiento,
1.8.2.1.2 Identidad de un Objeto
Identidad es la propiedad de un objeto que lo lleva a distinguirse de otros.
1.8.2.1.3 Comportamiento de un Objeto
Comportamiento es como un objeto actúa y reacciona, en términos de sus
cambios de estado y de los mensajes que intercambia.
El comportamiento de un objeto representa su actividad externamente visible y
testable. Son las operaciones que una clase realiza (llamadas también mensajes)
las que dan cuenta de como se comporta la clase. Por operación se denota el
servicio que una clase ofrece a sus clientes. Un objeto puede realizar cinco tipos
de operaciones sobre otro, con el propósito de provocar una reacción:
1. Modificador: altera el estado de un objeto.
2. Selector: accede al estado de un objeto, sin alterarlo.
3. Iterador: permite a todas las partes de un objeto ser accedidas en un
orden.
70
4. Constructor: crea un objeto y/o inicializa su estado.
5. Destructor: libera el estado de un objeto y/o destruye el objeto.
C++ soporta, además de las operaciones, subprogramas libres. En la terminología
de C++ las operaciones que un cliente puede realizar sobre un objeto se declaran
como funciones miembro.
1.8.2.1.4 Relaciones entre Objetos
Las relaciones entre objetos abarcan las operaciones, resultados y suposicionesque unos hacen sobre los otros.
1. Links. Son conexiones físicas o conceptuales entre objetos. Denota la
asociación específica por la que un objeto (cliente) usa o solicita el servicio
de otro objeto (servidor). El paso de mensajes entre objetos los sincroniza.
2. Agregaciones. Denota relaciones todo/parte, con capacidad para gobernar
desde el todo las partes. Es equivalente a la relación "tener un". El todo
puede contener a la parte.
Agregación es conveniente en las ocasiones en que el encapsulamiento de las
partes es prioritario. Si se requiere que las relaciones entre objetos estén
vagamente acopladas, se utilizan links.
1.8.2.2 Clases
Una clase es un conjunto de objetos que comparten una estructura y
comportamiento comunes.
• Clase representa una abstracción, la esencia que comparten los objetos.
• Un objeto es un ejemplo de una clase.
• Un objeto no es una clase, y una clase no es un objeto (aunque puede
serlo, p.e. en Smalltalk1).
Smalltalk es un lenguaje de programación de alto nivel
71
• Las clases actúan como intermediarias entre una abstracción y los clientes
que pretenden utilizar la abstracción. De esta forma, la clase muestra:
1. visión externa de comportamiento (interface), que enfatiza la
abstracción escondiendo su estructura y secretos de comportamiento.
2. visión interna (implementación), que abarca el código que se ofrece en
la interface de la clase.
1.8.2.2.1 Relaciones entre Clases
Representan tipos de compartición entre clases, o relaciones semánticas.
1. Asociación. Indica relaciones de mandato bidireccionales (Punteros ocultos
en C++). Conlleva dependencia semántica y no establece una dirección de
dependencia. Tienen cardinalidad.
2. Herencia. Por esta relación una clase (subclase) comparte la estructura y/o
comportamiento definidos en una (herencia simple) o más (herencia
múltiple) clases, llamadas superclases.
• Representa una relación del tipo "es un" entre clases.
• Una subclase aumenta o restringe el comportamiento o estructura
de la superclase (o ambas cosas).
• Una clase de la que no existen ejemplos se denomina abstracta.
• C++ declara como virtuales todas aquellas funciones que quiere
modificaren sus subclases.
3. Agregación. Representa una relación del tipo "tener un" entre clases.
Cuando la clase contenida no existe independientemente de la clase que la
contiene se denomina agregación por valor y además implica contenido
físico, mientras que si existe independientemente y se accede a ella
indirectamente, es agregación por referencia.
4. Uso. Es un refinamiento de la asociación donde se especifica cuál es el
cliente y cuál el servidor de ciertos servicios, permitiendo a los clientes
acceder sólo a las interfaces públicas de los servidores, ofreciendo mayor
encapsulación de la información.
72
5. Eiemplificación Se usa en lenguajes que soportan genericidad (declaración
de clases parametrizadas y argumentos tipo témplate). Representa las
relaciones entre las clases parametrizadas, que admiten parámetros
formales, y las clases obtenidas cuando se concretan estos parámetros
formales, ejemplificados o inicializados con un ejemplo.
6. Metaclases Son clases cuyos ejemplos son a su vez clases. No se admiten
en C++.
1.8.2.3 Relaciones entre Clases y Objetos
• Todo objeto es el ejemplo de una clase, y toda clase tiene O ó más objetos.
• Mientras las clases son estáticas, con semántica, relaciones y existencia
fijas previamente a la ejecución de un programa, los objetos se crean y
destruyen rápidamente durante la actividad de una aplicación.
El diseño de clases y objetos es un proceso incremental e iterativo. Debe
asegurar la optimización en los parámetros:
1. Acoplamiento: Grado de acoplamiento entre módulos.
2. Cohesión: Mide el grado de conectividad entre elementos de un módulo, y
entre objetos de una clase.
3. Suficiencia: Indica que las clases capturan suficientes características de la
abstracción para conseguir un comportamiento e interacción eficiente y con
sentido.
4. Completitud: Indica que la ¡nterface de la clase captura todo el significado
característico de una abstracción, escrito en el mínimo espacio.
5. Primitividad: Las operaciones deben implementarse si dan acceso a una
representación fundamental de la abstracción. Cuales son operaciones
primitivas y cuales no (se pueden realizar a partir de otras) es un asunto
subjetivo y afecta a la eficiencia en la implementación.
73
1.8.2.4 Análisis Orientado a Objetos
• Como primera aproximación clásica, se proponen como clases y objetos
los elementos de una categorízación clásica.
• Un análisis del comportamiento, de acuerdo con el agolpamiento
conceptual, lleva a formar clases basadas en grupos de objetos que
exhiben un comportamiento similar Se agrupan por comunes
responsabilidades (servicios ofrecidos en sus interfaces), formando
jerarquías de especialización de responsabilidades.
• En el análisis de dominio se intentan identificar objetos, operaciones y
relaciones que los expertos en el campo perciban como importantes en el
dominio del problema.
• Use-Case análisis o con guiones: se usa conjuntamente con alguno de los
anteriores. Se ejemplifican situaciones reales de utilización, a partir de
unas condiciones iniciales. Debe provocar en los participantes una
estructuración clara, y separación de responsabilidades.
• Las tarjetas CRC (Clase/Reponsabilidades/Colaboradores) sirven para
analizar guiones. Se escriben en tarjetas los nombres de clases, sus
reponsabilidades y sus colaboradores. Deben quedar claros los patrones
jerárquicos entre clases, y el flujo de mensajes.
• En la descripción informal se escribe el problema en frases simples,
subrayando nombres y verbos. Se convierte a los nombres en objetos y los
verbos son operaciones sobre objetos. Obliga a trabajar sobre el
vocabulario del problema, pero tiene el inconveniente de la imprecisión del
lenguaje, a la hora de describir comportamientos precisos.
• El análisis de estructuras usa métodos de programación estructural, de los
que deriva los elementos del modelo de objetos.
1.8.2.5 Notación
La notación debe ser un vehículo para capturar la forma de funcionar, el
comportamiento y la estructura de un sistema.
74
I
• No será posible encontrar la información relevante en un único diagrama.
Diversos puntos de vista serán necesarios.
• Debe existir un equilibrio entre la complejidad de la notación y la precisión
que se requiere al hacer el modelo.
• La notación no es un fin en si misma.
• Estas herramientas no garantizan un diseño correcto, pero ayudan al
diseñador a estructurar su conocimiento. El programador puede centrarse
en problemas de fondo, olvidándose de la forma.
• Para comprender un sistema orientado a objetos es necesario observar las
clases y objetos de acuerdo con los modelos:
1- Físico/lógico: La visión lógica describe la existencia y significado de las
abstracciones llave y de los mecanismos del espacio del problema, o
que definen la arquitectura del sistema. La visión física describe la
composición del software y hardware concreta de la implementación o
contexto del sistema. En esta descomposición se usan los diagramas
de clase, de objeto, de módulo y de proceso.
2. Estático/dinámico: los diagramas basados en los anteriores modelos
son estáticos, pero los objetos se crean y destruyen, envían mensajes y
dependen de triggers. En comportamiento dinámico se estudia los
diagramas de transición de estado y de interacción.
1.8.2.6 Conclusión
Como conclusión se puede recalcar que lo importante en la POO, como en la
programación tradicional, no es el lenguaje sino el planteamiento de la solución,
porque podría caerse en el error de pensar que el hecho de usar C++ significa
programar de manera orientada a objetos.
En el caso de la POO lo importante es enfocarse en los datos que serán
manipulados, en lugar de los procedimientos. El objetivo principal del diseño es la
descomposición del sistema en los datos subyacentes o mejor dicho en clases y
subclases y la definición de las propiedades de cada una.
75
1.8.3 WINDOWS SOCKETS Y EL ENTORNO DE VISUAL C++
Al construir una aplicación con Visual C++, se pueden emplear las clases Winsock
de la MFC (Microsoft Foundation Class) para incluir capacidades de comunicación
de red con relativa facilidad. La clase base, CAsyncSocket, proporciona
comunicaciones completas por socket manejadas por eventos. Se puede crear
una clase de socket descendiente que captura y responde a estos eventos.
1.8.3.1 Creación de un socket
Para crear un socket para cierta aplicación, lo que hay que hacer primero es
declarar una variable de CasyncSocket (o su clase descendiente) como miembro
de clase para una de las clases de la aplicación principal:
c/ass CMyDlg : public Cdialog
prívate:
CasyncSocket m_sMySocket;
Antes de poder utilizar el objeto socket, se debe llamar al método Créate, de
hecho crea el socket y lo prepara para su uso. La manera de llamar al método
Créate depende de cómo se empleará el socket. Si se va a utilizar para
conectarse con otra aplicación, siendo cliente, entonces no se necesita pasarle
parámetros al método Créate:
if (m_sMySocket.Create() )
// Continúa
e/se
// Aquí se lleva a cabo el manejo de errores.
76
Sin embargo, si el socket va a ser para escuchar si otra aplicación se quiere
conectar, siendo el servidor, entonces se necesita pasar cuando menos el número
de puerto por el que debe estar escuchando el socket:
if (m_sMySocket.Create( 4000) )
// Continúa
e/se
-51
// Aquí se lleva a cabo el manejo de errores.
Se puede incluir otros parámetros en la llamada del método Créate, como el tipo
de socket a crear, los eventos a los que debe responder el socket y la dirección
por la que dicho socket debe escuchar (en caso de que la computadora tenga
más de una tarjeta de red).
1.8.3.2 Establecimiento de una conexión
Una vez creado un socket, se está listo para abrir una conexión con él. Existen
tres pasos que intervienen en la captura de una conexión. Dos de ellos suceden
en el servidor, es decir, la aplicación que escucha esperando la conexión, y el
tercero ocurre en el cliente, quien hace la llamada.
Para el cliente, la apertura de la conexión es tan simple como llamar al método
Connect. El cliente tiene que pasarle los parámetros al método Connect: el
nombre de la computadora, o dirección de red, y el puerto de la aplicación al que
habrá que conectarse. El método Connect podría utilizarse de cualquiera de las
dos siguientes maneras:
77
¡f (m_sMySocket.Create("epn.edu.ec", 4000))
// Continúa
else
// Aquí se lleva a cabo el manejo de errores.
La segunda forma es:
¡f (m_sMySocket.Create("1 92.1 68.60.57", 4000))
// Continúa
else
// Aquí se lleva a cabo el manejo de errores.
Una vez establecida la conexión, se activa un evento que le informa a la
aplicación que ya está conectado o que sucedieron problemas y no se pudo
establecer dicha conexión.
Para el lado del servidor, o escucha, de la conexión, la aplicación primero debe
decirle al socket que escuche si hay conexiones entrantes, llamando al método
Listen. Éste toma un solo argumento, el cual no es obligatorio indicar. Este
parámetro especifica la cantidad de conexiones pendientes que se puedan poner
en la cola, en espera de que se complete la conexión.
De manera predeterminada, este valor es de 5, es decir, el máximo. El método
Listen puede llamarse como sigue:
¡f (m_sMy Socket Listen ( ) )
// Continúa
e/se
// Aquí se lleva a cabo el manejo de errores.
78
Cuando otra aplicación trata de conectarse con la aplicación que escucha, se
activa un evento que informa a esta última que hay una solicitud de conexión. La
aplicación que escucha debe aceptar la solicitud de conexión llamando al método
Accept. Éste requiere emplear una segunda variable CasyncSocket, que está
conectada con la otra aplicación. Una vez que un socket se pone en modo de
escucha crea otro socket, el cual se conecta con la otra aplicación. Este segundo
socket no debe llamar al método Créate, pues el método Accept crea el socket. El
método Accept se puede llamar como sigue:
if (m_sMySocket.Accept(m_sMySecondSocket))
// Continúa
e/se
Aquí se lleva a cabo el manejo de errores.
En este punto, la aplicación que se conecta ya está conectada con el segundo
socket de la aplicación escucha.
1.8.3.4 Envío y Recepción de Mensajes
El envío y recepción de mensajes a través de una conexión de socket se vuelve
un tanto rebuscado. Dado que se pueden utilizar los sockets para enviar cualquier
tipo de datos, sin que importe de qué se trata, las funciones que envían y reciben
datos esperan que se les pase un apuntador a un búfer genérico. Para el envío de
datos, este búfer debe contener los datos a enviar. Para la recepción de datos, en
este búfer se copiarán los datos recibidos.
Siempre y cuando se envíen y reciban cadenas y texto, es posible efectuar con
estos búfers conversiones bastante sencillas de y a Cstrings.
79
para enviar un mensaje a través de una conexión de socket, se utiliza el método
Send. Éste requiere de dos parámetros y tiene un tercero, opcional, que sirve
para controlar la manera de envío del mensaje. El primer parámetro es un
apuntador al búfer que contiene los datos a enviar. Si el mensaje está en una
variable Cstring, puede emplearse el operador LPCTSTR para pasar la variable
como búfer. El segundo parámetro es la longitud del búfer. El método devuelve la
cantidad de datos que se enviaron a la otra aplicación. Si sucede un error, la
función Send devuelve SOCKET_ERROR. Puede emplearse el método Send
como sigue:
Cstring strMyMessage;
int iLen;
int ¡AmtSent;
iLen = strMyMessage. GetLenght( );
¡AmtSent = m_sMySocket.Send(LPCTSTR(strMyMessage), iLen);
if(iAmtSent == SOCKET^ERROR)
{
// Aquí se lleva a cabo el manejo de errores
e/se
// Todo está bien
Cuando hay datos listos para recibirse de la otra aplicación, se activa un evento
en la aplicación receptora. Esto le permite a la aplicación saber que puede recibir
y procesar el mensaje. Para recibir el mensaje, debe llamar al método Receive.
Éste toma los mismos parámetros que el método Send, con una pequeña
diferencia. El primer parámetro es un apuntador a un búffer donde se puede
copiar el mensaje. El segundo parámetro es el tamaño del búfer; le dice al socket
la cantidad de datos a copiar (en caso de que se reciba más de lo que cabe en el
80
búfer). Como el método Send, el método Receive también devuelve
SOCKET_ERROR. Si el mensaje que su aplicación está recibiendo es de texto,
se puede copiar directamente a una variable Cstring.
Esto permite utilizar el método Receive como sigue:
char *pBuf = newcharf 1025];
int ¡Bufsize = 1024;
int iRcvd;
Cstring strRecvd;
iRcvd = m_sMySocket.Receíve(pBuf, ¡BufSize);
if( iRcvd == SOCKET_ERROR)
e/se
// Aquí se lleva a cabo el manejo de errores
pBuff iRcvd] = NULL;
strRecvd = pBuf
// Continúe procesando el mensaje.
Cuando se reciban mensajes de texto, siempre es una buena idea poner un NULL
en la posición del búfer justo después del último carácter recibido, como en el
ejemplo previo. Es posible que haya caracteres de basura en el búfer que la
aplicación podría interpretar como parte del mensaje si no se añade el NULL para
truncarla cadena.
81
1.8.3.4 Cerrar la Conexión
Una vez que la aplicación ha terminado su comunicación con la otra aplicación,
puede cerrarse la conexión llamando al método Cióse. Éste no acepta
parámetros y se usa como sigue:
m_sMySocket.Close ();
La función Cióse es uno de los pocos métodos de CasyncSocket que no devuelve
ningún código de estado. En el caso de todas las funciones miembro que se ha
visto, se puede capturar el valor de devolución y determinar si ha sucedido un
error.
1.8.3.5 Detección de Errores
Cuando una función miembro de CasyncSocket devuelve un error, sea FALSE
para la mayoría de las funciones o SOCKET_ERROR para las funciones Send y
Receive, se puede llamar al método GetLastError para obtener el código del error.
Esta función únicamente devuelve códigos de error y se tiene que buscar su
equivalente traducción. Todos los códigos de error de Winsock se definen con
constantes, por lo que se puede valer de las constantes en su código para
determinar el mensaje de error, si es que lo hay, el cual será desplegado al
usuario.
La función GetLastError se utiliza de la siguiente forma:
int iErrCode;
iErrCode =
switch (iErrCode)
ícase WASNOTINITIALISED;
m_sMySocket. GetLastError( );
82
CAPITULO 2
DISEÑO E IMPLEMENTACIÓN DE UN PROGRAMA PARA
MONITOREO DE DISPOSITIVOS CONFIGURADOS CON
TCP / IP
2.1 OBJETIVO DEL DISEÑO
El objetivo principal de la realización de este Proyecto de Titulación, será diseñar
e implementar un programa cuyo interfaz sea Microsoft Windows el cual permita
a un usuario monitorear el estado de cualquier dispositivo configurado con el
protocolo TCP/IP dentro de una Red de Área Local. Al saber el estado de un
dispositivo, el usuario tendrá la capacidad de identificar si cierto dispositivo se
encuentra encendido y conectado a la red o si éste está desconectado, además
podrá saber el tiempo en que el Host fuente recibe una respuesta del Host
destino, cabe recalcar que no se sabrá los motivos del por qué un dispositivo se
encuentra desconectado de la red. El usuario podrá monitorear un dispositivo
desde cualquier computadora que se encuentre conectado a la red y que tenga
una configuración básica de red es decir que tenga asignada una dirección IP.
Los dispositivos a monitorear pueden ser servidores, computadoras, ruteadores,
impresoras, switches inteligentes y todo aquel dispositivo que forme parte de una
red específica o que corresponda a una dirección de Internet.
El programa tendrá dos opciones de monitoreo: la primera monitorear a un sólo
dispositivo cada cierto tiempo el cual será definido por el usuario y que puede
estar dentro de una red de área local o si es que dicha red tiene salida a internet,
se podrá monitorear el estado del dispositivo remoto; la segunda opción es la de
monitorear a un conjunto de dispositivos peretenecientes a una red de área local,
esto implica que los dispositivos deben formar parte de una red clase C.
83
El programa deberá correr sin ningún problema bajo un ambiente de Microsoft
Windows multitarea y la interfaz por medio de la cual el usuario ingrese los
datos del dispositivo a monitorear será totalmente gráfica, tipo ventanas de
diálogo y de fácil manejo. Al usuario le bastará con ingresar la dirección IP o el
Hostname correspondiente del dispositivo a monitorear para que pueda obtener
una respuesta.
Por otro lado como objetivo será el de demostrar al usuario que la API de
Windows Sockets y la funcionalidad de Microsof Foundation Class (MFC) de
Windows es una herramienta muy poderosa para realizar tareas de conectividad
es decir dar a conocer cómo se utilizan aplicaciones del Interfaz de Winsock para
llevar a cabo comunicaciones de red entre dos o más computadoras o
dispositivos pertenecientes a una red. Demostrar básicamente el funcionamiento
de las comunicaciones de red con el protocolo de red TCP/IP que se ha
convertido en uno de los principales protocolos de red en Internet.
2.2 REQUERIMIENTOS DE SOFTWARE PARA EL DISEÑO
A medida que Microsoft ha introducido nuevas tecnologías dentro de las
plataformas de Windows, también ha incluido herramientas adecuadas para
programar, tal es el caso de los recursos que presta la Programación Orientada
a Objetos con Microsoft Visual C++6.0, bajo un ambiente Microsoft Windows.
Una de las aplicaciones que ofrece Microsoft Windows es la de Winsock y su
funcionalidad para conectividad y redes.
Se usará como plataforma para el desarrollo del programa el ambiente Microsoft
Windows y como utilitario para programación, Microsoft Visual C++ 6.0 por
poseer un compilador de clase mundial y que dentro de sus clases y librerías
incluye a Windows Sockets que nos permitirá diseñar un programa versátil de
fácil manejo para el usuario y en un ambiente de Windows con el cual estamos
completamente familiarizados.
84
2.3 REQUERIMIENTOS DE HARDWARE PARA EL DISEÑO
Para comenzar con la programación necesitamos de una computadora con las
siguientes características:
• CARACTERÍSTICAS MÍNIMAS:
o Procesador Pentium.
o Memoria RAM de 64 MB.
o Disco duro de 1 GB.
o CDROM.
o Monitor VGA.
o Tarjeta de Video con resolución de más de 256 colores, 800 x 600
pixels.
o Tarjeta de Red 10Mbps.
o Tarjeta de fax/modem (opcional).
• CARACTERÍSTICAS ÓPTIMAS
o Procesador Pentium II, Pentium III ó Pentium IV.
o Memoria RAM, más de 64 MB.
o Disco duro de más de 2 GB.
o Multimedia y CDROM.
o Monitor SVGA.
o Tarjeta de video 32 bit color, 1024 x 768 pixels.
o Tarjeta de Red 10/100 Mbps autosensitive.
o Tarjeta de Fax/Modem (opcional).
Con las características mínimas se puede diseñare! programa aunque Visual C++
6.0, en sus procesos de compilación y depuración se volverá más lento. Para la
parte de pruebas y visualización con un monitor VGA podrá apreciarse los
resultados del programa aunque no estéticamente.
85
La tarjeta de red es fundamental para poder probar la aplicación, en su ausencia
se podrá probar si se tiene instalado una tarjeta de fax/módem aunque no es lo
más recomendable, lo mejor será probar los resultados dentro de una Red de
Área Local y que tenga salida a Internet.
2.4 DISEÑO DEL PROGRAMA
2.4.1 CONTENIDO BÁSICO DEL DISEÑO.
El programa deberá contener datos de entrada que generalmente lo ingresa el
usuario y datos de salida que representan los resultados del monitoreo, además
de opciones para imprimir datos de salida y para poder inicializar y salir del
programa. Contará además con un acceso a ayuda donde se explicará ciertos
conceptos técnicos y de manejo del programa
2.4.1.1 Datos de entrada:
o Selección de Monitoreo a uno o a varios dispositivos
o Ingreso de Dirección IP para monítorear un dispositivo
o Ingreso de Dirección IP final para el caso de monitoreo de varios
dispositivos
o Ingreso de secuencia de monitoreo
o Ingreso de tiempo de monitoreo
o Ejecución del programa
El usuario necesitará escoger entre dos opciones: monitorear a un solo
dispositivo o monitorear a un conjunto de dispositivos dentro de una red de Área
Local.
Para el caso de un solo dispositivo deberá escoger la primera opción, aquí el
usuario podrá ingresar la dirección IP, el nombre de hosto la dirección de Internet
86
de la cual solicita una respuesta de eco. Para el caso de que se necesite
monitorear a ciertos dispositivos de una red de Área Local tendrá que ingresar
tanto la dirección de inicio como la dirección final del grupo de dispositivos.
El usuario ingresará una Secuencia de Monitoreo, esto es el intervalo de tiempo
en que desea obtener datos del monitoreo.
Ingresará el tiempo de monitoreo es decir cada cuanto tiempo desea obtener un
resultado dentro de la secuencia predeterminada.
Por último tendrá que ejecutar una acción para que pueda visualizar los datos
enviados y resultados del monitoreo
2.4.1.2 Datos de Salida
o Visualízación de datos enviados
o Visualízación de resultados de Monitoreo
El usuario podrá visualizar tanto los datos enviados como los resultados del
monitoreo en una ventana que esté dentro de la ventana principal de programa.
El despliegue de información enviada contendrá la dirección a la cual está
realizando un monitoreo y el despliegue de información de resultados contendrá
la dirección a la que realizó el monitoreo, el tiempo que se demoró el host local
en obtener una respuesta del host remoto y la hora en que se obtuvo dicha
respuesta,
2.4.1.3 Opciones
o Ejecutar una acción para inicialización del programa y enceramiento de la
ventana principal
o Ejecutar una acción para imprimir los resultados del monitoreo
87
o Ejecutar una acción para obtener ayuda respecto a información técnica y
uso del programa
o Ejecutar una acción para terminar y salir del programa
El usuario al ejecutar la acción inicializar el programa, podrá volver a ingresar
nuevos datos o direcciones a monitorear, además las ventanas de resultados se
pondrán en blanco con el objeto de presentar en un próximo monitoreo nuevos
valores.
La opción imprimir permitirá al usuario tener el reporte del último monitoreo que
realizó impreso en una hoja,
Podrá al ejecutar la opción de Ayuda, obtener una ventana donde se muestre
información respecto a la teoría de redes, a la teoría de Sockets, enfoques
técnicos sobre monitoreo de redes y sobre todo un manual de usuario para la
utilización del programa.
La opción salir, previa confirmación al usuario terminará con el programa y cerrará
la ventana principal de la aplicación.
Contará además con un menú que le permita escoger al usuario las opciones
antes mencionadas. Se trabajará con un menú contextual, esto permitirá al
usuario en el caso de que la computadora no disponga de un mouse, trabajar sólo
con el teclado y si el teclado por alguna razón dejara de operar podrá trabajar con
el mouse.
Además existe una opción que muestra la hora en la que se acceso a la
aplicación, este parámetro de tiempo es una referencia para saber cuanto tiempo
se toma el programa en monitorear a un dispositivo o a un grupo de ellos.
2.4.1.4 Diagrama Básico de la Ventana de Diálogo Principal
Selección
Monitoreo a un solodispositivo
Monitoreo a variosdispositivos
« . , A ,Opción Ayuda
Ingreso dirección IP a monitorear Ingreso dirección Ip final cuandomonitoreo varios dispositivos
Ingreso secuencia de monitoreo Ingreso tiempo de monitoreo
EJECUTO MONITOREO
Visualizo datos de host a monitorear Ooción Inicializar Pantalla
Ooción Imorimir Resultados
Visualizo Resultados del monitoreo
EJECUTO SALIDA DELPROGRAMA
Fig. 2.1 Diagrama Básico del Contenido de la Ventana Principal
2.4.2 CREACIÓN DE OBJETOS Y ASIGNACIÓN DE NOMBRES Y
FUNCIONES
Para cada uno de los objetos del diagrama básico del contenido de la ventana
principal del programa se asignará un nombre identificativo y la función que va a
realizar en el contexto del programa
89
2.4.2.1 Objeto Seleccionar
Nombre del Objeto: SELECCIONE
Función: Permitirá escoger una de las opciones para monitoreo, esto es a un
solo dispositivo o a varios dispositivos dentro de una Red de Área Local. Se
podrá escoger también la opción de monitorear una sola vez o en forma
secuencial
2,4.2.2 Objeto Primera Opción de Monitoreo
Nombre del Objeto: PING
Función: Al escoger esta opción el usuario podrá monitorear a un solo dispositivo
dentro de una Red de Área Local o si el Host tiene salida a Internet podrá
monitorear un Host asociado a una dirección de Internet específica.
2.4.2.3 Objeto Segunda Opción de monitoreo
Nombre del Objeto: MONITOREO A UNA RED LOCAL
Función: Al escoger esta opción el usuario podrá monitorear a varios
dispositivos dentro de una Red de Área Local de la que será miembro el Host de
monitoreo.
2.4.2.4 Objeto Ingreso de Dirección IP
Nombre del Objeto: (Apuntará como dato inicial a LOCALHOST)
Función: Al escoger esta opción el usuario podrá escribir la dirección IP a
monitorear, o el nombre de Host o la dirección Internet siempre y cuando se haya
seleccionado la opción PING. Si se seleccionó la Opción MONITOREO A UNA
RED LOCAL tendrá que escribir la dirección IP de Inicio del conjunto de
dispositivos a monitorear.
90
2.4.2.5 Objeto Ingreso de Dirección IP Final
Nombre del Objeto: (estará en blanco, esperando a ser escrito)
Función: Al escoger esta opción el usuario podrá escribir la dirección IP final del
conjunto de dispositivos a monítorear, esta opción deberá estar activa siempre y
cuando se haya seleccionado la opción MONÍTOREAR A UNA RED LOCAL,
caso contrario si la opción que eligió el usuario es PING, permanecerá
desactivada.
2.4.2.6 Objeto Ingreso de Secuencia de Monitoreo
Nombre del Objeto: (Como dato inicial presentará el número 1)
Función: Al escoger esta opción el usuario podrá escoger el intervalo inicial del
tiempo en que se va a realizar un Monitoreo, este podrá estar en el orden dede
las 1 y 24 horas, no aceptará otros valores ni cadena de caracteres.
2.4.2.7 Objeto Ingreso de Tiempo de Monitoreo
Nombre del Objeto: (Como dato inicial presentará el número 1)
Función: Al escoger esta opción el usuario podrá escoger el tiempo en que
quiere que se haga un monitoreo a cierta dirección, este está en un intervalo de 1
a 60 minutos y no acepta otro valor ni cadena de caracteres.
-í í 2.4.2.8 Objeto Ejecución de Monitoreo
Nombre del Objeto: HACER PING / MONÍTOREAR
Función: Al escoger esta opción el usuario ejecuta el monitoreo de cierta
dirección previamente ingresada, si la selección inicial fue PING, el objeto
aparecerá como: HACER PING, si la opción escogida fue MONÍTOREAR A UNA
RED LOCAL el objeto aparecerá como MONÍTOREAR.
91
2.4.2.9 Objeto Visualización de Dirección IP a Monitorear
Nombre del Objeto: (La ventana inicial aparece en Blanco)
Función: Este objeto se llenará indicando la dirección IP a ser monitoreada
2.4.2.10 Objeto Visualización de Resultados de Monitoreo
Nombre del Objeto: (La ventana inicial aparece en Blanco)
Función: Este objeto se llenará indicando los resultados del Monitoreo, entre los
datos desplegados estará, la dirección IP monitoreada, el tiempo de viaje
redondo desde que se envió una solicitud de eco hasta que se recibió la
respuesta, la hora actual referida a la computadora en la que se recibieron los
datos y la indicación de que el Host monitoreado está activo o conectado a la red,
para cuando no se pudo recibir información del Host a monitorear se llenará con
un mensaje de error en la recepción de los datos.
2.4.2.11 Objeto Opción Ayuda
Nombre del Objeto: AYUDA
Función: Al ejecutar este objeto el usuario se abrirá una ventana con la ayuda de
Windows cuya información corresponderá a datos técnicos sobre redes, sobre
sockets y acerca del manejo del programa..
2.4.2.12 Objeto Opción Inicializar pantalla
Nombre del Objeto: 1NICIALIZAR PANTALLA
92
Función: Al ejecutar este objeto al usuario se le presentará una caja de diálogo
en la que le preguntará si realmente desea inicializar la pantalla, si escoge la
opción no, la pantalla no sufrirá ninguna modificación caso contrario se
encerarán todos los datos de la pantalla hasta ahora presentes, borrará el
contenido de las ventanas de presentación de datos y resultados y se cargarán
(os datos por default como haber recién iniciado el programa.
2.4.2.13 Objeto Opción Imprimir
Nombre del Objeto: IMPRIMIR
Función: Al ejecutar este objeto el usuario abrirá un cuadro de diálogo de
impresión donde podrá escoger la impresora para imprimir los resultados del
monitoreo.
2.4.2.14 Objeto Opción Salir
Nombre del Objeto: SALIR
Función: Al ejecutar este objeto al usuario se le desplegará una caja de diálogo
donde se le preguntará si realmente quiere salir y terminar el programa, si elige
que no, podrá seguir usando el programa, caso contrario éste se cerrará.
2.4.3 PRESENTACIÓN BÁSICA DE INTERFAZ PROGRAMA - USUARIO
El siguiente gráfico muestra el diseño de la ventana principal que el usuario
observará al ejecutar el programa, los nombres mostrados son los que
corresponderán al interfaz programa - usuario a ser implementado.
93
SELECCIÓN
PING TTKMPORKAT.
MONTTOREO A UNARED LOCAL TINA SOLA VF.7
AYUDA
DIRECCIÓN IP INICIAL DIRECCIÓN IP FINAL
Haciendo PING durante: ( ) Minutos. Cada ( ) Segundos
HACER PING / MONITOREAR
VISUALIZO IP A MONITOREAR
INICIALIZAR PANTALLA
IMPRIMIR
VISUALIZO RESULTADOS DEL MONITOREO
SAT.TR
Fig. 2.2 Presentación Básica de Interfaz Programa - Usuario
2.5 IMPLEMENTACIÓN DEL PROGRAMA
2.5.1 CREACIÓN DEL PROYECTO CON EL APPWIZARD DE MFC.
Se iniciará la implementación del programa dándole un nombre al proyecto, el
proyecto se denominará: MONITORJCMP.
94
Se usará todas las bondades que ofrece la programación de alto nivel orientada
a objetos con Microsoft Visual C++ versión 6.0.
El programa tendrá las siguientes características:
• El proyecto se creará a través del AppWízard de MFC (Microsoft
Foundation Class).
Fie* Pinjada Woktpace» | Other Documente |
KlO)ftCt D*m>:
3Qj*t« Reiource Typs Wizaid
0 Cietom AppWtzwd
ÍP Databass Projert
D svStudio Addnn Woard
lSAPI Entena»! Wizad
MakefletfC ActiveX ConliofJizafd
IMOÑÍTORJCMP
Logation;
|C:\vi«ud cWONITORJCMP
f* C¿eate r»w wotkípace
f Add to o.iirent wotkipace
I~ ÜF.«ndcí,r;v&f.ti U*y Pcojed
7]V.'n32 Appicatíon
V.%i32 Contóle Appfcation
Sv1n32 Dynamic-ünk Ltotaiji
W¡n32 SlatícLfctay
OK I C^cel
Fig. 23 Opción MFC AppWizard(exe) en Visual C++
La plataforma sobre la cual se construirá el proyecto será Win32.
La Aplicación será tipo Diálogo.*1FC AppWií.ird - Step 1
Whal typa oí appfcatréfi «wuU you fte to ctaate?
f" Single document
(~ Muttipla documentt
( DíalogbMed
What languaga woJd you Ske your retoucet íi?
<Back [ Neart> J Cancel
Fig. 2.4 Configurando un Proyecto con MFC AppWizard(exe) en Visual C++. Paso 1
• Usará un contexto de ayuda y soportará Windows Sockets.
MFC AppWizard - Step 2 of 4
Editiig C«ti*l: j R«c*i4 ' I_ : —• [y
O B»*» B«ttM 1
— «J pu,.
What featuret woukJ you Kke to include?
F Aboutbox
17 Context-sensitive Help
I* 30 controls
What othet support woddyou fike to include?
V Automation
P? ActiveX Controls
WoUdyou ükfl to include WOSA support?
Windows Sockets
Please entet a btíe f or your olabg;
MONITOHJCMP
I Nent> |<Back I Next> Finish Cancel
95
Fig. 2.5 Confígurando un Proyecto con MFC AppWizard(exe) en Visual C++. Paso 2
El proyecto usará una MFC estándar y se compartirá sus librerías.
?? r
MFC AppWizard - Step 3 of 4
*. Microsoft Devetooei Sludio
nrurnojJOZ
What style oí pioject woutd you like ?
í? MFC Standard
í"1 Windows Exploref
Wouldyou Ske to genetate íource file commentí?
(* Ye», olease
í No, thonki»ou
How wouldyou ike to use the MFC foraiy?
& AiashatedDLL
f" As a darjcalli» friked Ibrary
<Back | Next> | Finish Cancel
Fig. 2.6 Confígurando un Proyecto con MFC AppWizard(exe) en Visual C++. Paso 3
96
El código fuente principal se lo escribirá sobre el archivo
MONITORJCMP.cpp y las variables y estructuras necesarias se crearán
sobre MONITOR ICMP.h
MFC AppWizard - Step 4 of 4
AppWizard créales tho foKowing dasses for you
CMONITOR ICMPAcCMGNITORJCMPDIg
Class ñame: Header file:
JCMONITORJCMPA JMONITORJCMP.h
Base dan: Imptementation file:
j C V / t ó p p J M O N I T O R J C M P . c p
<Back Rnísh Cancel
Fig, 2.7 Confígurando un Proyecto con MFC AppWizard(exe) en Visual C-f-K Paso 4
•*r '.<;-,<
*¡
En resumen el programa se implementará bajo la siguiente estructura:
New Project Information
AppWizard will cieate a new skeleton ptoject with the following specifications;
Application type of MONITORJCMP:Dialog-Based Application targeting:
Win32
Classes to be created:Application: CMONITORJCMPApp in MONITORJCMP.h and
MONITORJCMP.cppDialog: CMONITORJCMPDIg in MONITOR_ICMPDIg.h and
M ONIT O R_l CM PD Ig. cpp
Features:+ About box on system menú+ Context-Sensitive Help and initial RTF files•t- 3D Controls•«•Windows Sockets Support•*- Uses shated DLL implementation (MFC42.DLLJ+ ActiveX Controls support enabled+ Localizable text in:
Spanish [International Sort]
Project Dírectoiy:CAvisual c\PROYECTO\MONJTORJCMP
OK J Cancel |
Fig. 2.8 Confígurando un Proyecto con MFC AppWizard(exe) en Visual C-H-. Resumen
97
2.5.2 IMPLEMENTACIÓN DE LA VENTANA PRINCIPAL
A continuación se muestra la Configuración de las propiedades de los Controles
del Diálogo principal de la aplicación
VENTANA PRINCIPAL:
o Propiedad
o Valor
o Caption:
o Tipo:
o Clase Base:
o Identidad del Recurso:
o Nombre de la Clase:
IDD
IDDJMONITOR_ICMP_DIALOG
MONITORJCMP
Ventana de Diálogo principal
CDialog
IDD_MONITOR_ICMP_DIALOG
CMONITORJCMPDIg
FUNCIÓN: SELECCIONAR OPCIONES DE MONITOREO
-SELECCIONEr PIWGr MONITOREO A UNA RED LOCAL
o Propiedad
o Valor
o Caption:
o Objeto:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_SELECCIONE
&SELECCIONE
Group Box
CMONITORJCMPDIg
98
Group BOH Propertíes
¡^General | Styles | Extended Styles |
ID: IDC_SELECCIONEW Visible r Group
V Disabled f~ Tafcslop
&SELECCIONEHelp ID
FUNCIÓN: SELECCIONAR LA OPCIÓN PING:
m r
o Propiedad
o Valor:
o Caption:
o Objeto:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_RSEND
&PING
Radío Button
mJSend
int
OnRsend()
CMONITORJCMPDIg
Radio Button Propertíes X]
General I Styles | Extendédseles |
ID: |IDC_RSEND TJ £aption: jtcPING
W Visible 17 firoup Í7 |eÍp]DÍ
f" Dísabled f" Ta^stop
99
FUNCIÓN: SELECCIONAR LA OPCIÓN DE MONITOREO A UNA RED
LOCAL
MONITOREO A UNA RED LOCAL
o Propiedad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
!DC_RECEIVE
MONITOREO A UNA &RED LOCAL
Radio Button
OnRece¡ve( )
CMONITORJCMPDIg
Radio Button Properties
-W f General | Styles | Extended Styies |
ID: IDC_RECEIVE
17 Visible r fiíoup
r~ Dísabled f" Tafc stop
ion: MONITOREO AUNA&R
FUNCIÓN: TIEMPOS DE MONITOREO
-TIEMPOS-
TIEMPO REAL
UNA SOLA VEZ
100
o Propiedad
o Valor
o Caption:
o Objeto:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_TIEMPO
&TIEMPOS
Group Box
CMONITORJCMPDIg
Group Bou Propertíes
General I Styles | Extendédseles |
ID: 3 £aption: J&TIEMPOS
Viable P Group T
Disábled P Tabstop
FUNCIÓN: SELECCIONAR LA OPCIÓN TIEMPO REAL:
TIEMPO REAL
o Propiedad
o Valor:
o Caption:
o Objeto:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDCJTREAL
T&IEMPO REAL
Radio Button
m_treal
int
OnTreal()
CMONITORJCMPDIg
101
Radío Button Properties
General | Styles | Extendédseles |
ID: lDC_TREAL £aP|ion: [iiaiaBiaiiaaa
17 Visible R firoup I
P Disabled P Tatjstop
FUNCIÓN: SELECCIONAR LA OPCIÓN UNA SOLA VEZ:
UNA SOLA VEZ
o Propiedad
o Valor:
o Caption:
o Objeto:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDCJJNAVEZ
UNA SOLA &VEZ
Radio Button
OnUnavezQ
CMONITORJCMPDIg
Radio Button Properties
General Styles Extendédseles
ID: |IDC_UNAVEZ jj £aption:
R7 Visible f~ firoup ÍT
I~ Disabled V Tafestop
3
FUNCIÓN: INGRESARLA DIRECCIÓN IP A MONITOREAR
Haciendo PING a IP:
102
o Propiedad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_EHOSTNAME
Edit Box (Caja de Edición)
m_strHName
CString
CMONITORJCMPDIg
Edit Properties £]
-W f General | Styles | Extended Styles |
3PEE!
ID: pDC_EHÜSTNAME
P" Visible I"" Group
!"" Diíábled 17 Ta^stop
FUNCIÓN: INGRESAR LA DIRECCIÓN IP FINAL A MONITOREAR
Hasta IP: Edit
o Propiedad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_EHOSTFIN
Edit Box (Caja de Edición)
m_strHNameFin
CString
CMONITORJCMPDIg
103
Edit Properties
f General | Styles | Extendédseles |
ID: |IDC_EHOSTFIN
W Visible r firoup F7
Disabled stop
FUNCIÓN: INGRESARLA HORA INICIAL DE MONITOREO
Monitorear desde las: j horas,
Hacer PING durante: U minutos
o Propiedad
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_hora1
Combot Box
m_int_hora1
int
CMONITORJCMPDIg
Combo Bou Properties
General Data ¡ Styles | Extendédseles |
ID: !DC_hora1 j
W Visible P firoup f?
l~ Disabled $s Tabstop
104
FUNCIÓN: INGRESARLA HORA FINAL DE MONITOREO
Hasta las: horas,
o Propiedad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_hora2
Combo Box
m_int_hora2
int
CMONITORJCMPDIg
Combo BOK Propertíes
General Data | Styles | Extendédseles |
ID: DC_hora2 jr
I* Visible r Group |7C
l~ Disabled P7 Tabstop
FUNCIÓN: INGRESAR EL INTERVALO DE MONITOREO
cada:
Cada...
Minutos
Segundo
o Propiedad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
ID
IDC_minutos
Combo Box
m ¡minutos
•$:$&
105
o Tipo de Variable: int
o Método:
o Pertenece a la Clase: CMONITORJCMPDIg
Combo Box Properties
General I Data | Styfet | Extendédseles |
ID: |lDC_mrnutos j
17 Visible r firoup 17 ÜPÍDJ
r Disabled 17 Tabstop
FUNCIÓN: EJECUTAR ACCIÓN DE MONITOREO
HACER PINQ
o Propiedad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_BSEND
HACER PIN&G
Button
m_ctlSend
CButton
OnBsend( )
CMONITORJCMPDIg
106
WlLJiiiilllWilüBBBngi
-W f General | Styles | Extended Styles |
ID: | I D C _ B S E N D ^ Cap*"0* IHACERPINÍ-G17 Viable f" Group F~
I™ Disabled 17 Tabstop
FUNCIÓN: EJECUTAR INICIALIZACION DE LA PANTALLA:
Inicializar Programa
o Propiedad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_BLimpiar
&lnicializar Programa
Button
OnBLimpiar( )
CMONITORJCMPDIg
Push Button Properties
General Styles Extended Styles
ID: jlDC_BL¡mp¡ar •y] £aption: ¡íclnícializar Programa
R Visible W üroup
r~ Dis^bled 17 Ta¿stop
107
FUNCIÓN: EJECUTAR SALIDA DEL PROGRAMA:
SALIR
• , -\¿: --t, í-
*3 i
o Propiedad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_BEND
&SALIR
Button
OnBend()
CMONITORJCMPDIg
Push Button Properties EfflSfKTSTT' flfi¡*&¿trÁl:.¿-..-[2l
-W f General I Styles | Extended Styles |
ID: |IDC_BEND
F7 Vgible |~ üroup
f" Disabied p" Ta¿$lop
¿J Caption: [&SALIR
FUNCIÓN: EJECUTAR IMPRESIÓN DE RESULTADOS
IMPRIMIR
o Propiedad
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
ID
IDC_PRINT
I&MPRIM1R
Button
108
o Método: OnPrint( )
o Pertenece a la Clase: CMONITORJCMPDlg
Push Button Properties
-W f General I Slyles | Extendédselas |
ID: |IDC_PRINT ^J Caption: [l&MPRIMIR
17 Visible r firoup 17 ígJípS
!~ Dis^bled R Tabstop
FUNCIÓN: EJECUTAR VISUALIZAR DATOS DE ENVlO
Monitor eando a: Destino:
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDCJJSTSEND
List Box
m_ctlListSend
CListBox
CMONITORJCMPDIg
109
List Box Properties
f General j Stytes | Extendédseles |
|D: |IDC_LISTSEND
F7 Visible 17 Group
f" Disabled W Tab stop
FUNCIÓN: VISUALIZAR RESULTADOS DEL MONITOREO
RESULTADOS DEL MONITOREO
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDCJJSTRCV
List Box
m_ctlListRcv
CListBox
CMONITORJCMPDIg
List BOK Properties
General i Styles | Extendédseles |
ID: |IDC_LISTRCV
|7 Visible f~ fifoup
|~" Disabled R Tab stop
FUNCIÓN: EJECUTAR AYUDA
110
Ayuda
o Identidad:
o Valor:o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDJHELP
&Help
Button
CMONITORJCMPDIg
Push Buffon Praperti'e;
General I Styles j Extended Styíes |
£aption: I ¡Ayuda-il J
R Visible r firoup |7 ¿Jeip ID
F Dísabled W Ta£ stop
FUNCIÓN: MOSTRAR TfTULO
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
ID
IDC_STATIC
IDB_TITULO
Bitmap
111
o Pertenece a la Clase: CMONITORJCMPDIg
Picture Properties
f General Styles | Extended Styles |
ID: JIDC.STATIC jj Tupe: JBitmap
R Visible r~ üroup
P Disjibled P" Tabstop
[unaanuim
Color:
FUNCIÓN: IDENTIFICAR A UNA CAJA DE TEXTO ESTÁTICO
Haciendo PIÜG a IP:
Monitoreo
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATICHOSTNAME
&Haciendo PING a IP:
Estatic Text
m_static_hostname
CStatic
CMONITORJCMPDIg
1? Geneial Styles | Extended Styles |
ID: |lDC_STATICHOSTNAME ^J £aptrán:
|7 Visible P Group T
\~ Tafcstop
¿Haciendo PING a IP
112
FUNCIÓN: IDENTIFICAR A UNA CAJA DE TEXTO ESTÁTICO
**********
Hasta IP:
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATICJPFINAL***********
Estatic Text
m_static_ipfinal
CStatic
CMONITORJCMPDIg
TextProperties
General Styles Extendédseles
W Visible R Group T
p Disábled JT" Tabstop
FUNCIÓN: IDENTIFICAR A UNA CAJA DE TEXTO ESTÁTICO
Hacer PIKG durante:
Monitorear desde las:
o Identidad:
o Valor:
o Caption:
o Tipo:
ID
IDC_STATIC
Hacer PING durante:
Estatic Text
113
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
m_static_hinic¡o
CStatic
CMONITORJCMPDIg
Text Properties iiiSt*),"W ? General | Styles j Extendédseles |
ID: PC STATIC HINICIO
Visible
Disabted
H Captíon: |Hacer PING durante;
firoup R
FUNCIÓN: IDENTIFICAR A UNA CAJA DE TEXTO ESTÁTICO
Minutos.
fá Éá--.i';>*:'s
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase;
Text Properties
ID
IDC_STATIC_HFIN
Minutos
Estatic Text
m_static_hfin
CStatic
CMONITORJCMPDIg
General | Styles | Extendédseles
ID:
R Visible
f~ Disjbled
1 fiíoup
f~ Tafestop
£aption: Minutos.
P" Help ID
114
FUNCIÓN: IDENTIFICAR A UNA CAJA DE TEXTO ESTÁTICO
Cada...
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
Text Properties
ID
IDC_STATÍC_INTERVALO
Cada...
Estatic Text
m_static_intervalo
CStatic
CMONITORJCMPDIg
u]
f General j Styles | Extendédseles |
ID: ||DC_STATIC_1NTERVAL ^J £aption:
F? Vfflbto 17 group P ÜelpID
P Disabled P Tafastop
FUNCIÓN: IDENTIFICAR A UNA CAJA DE TEXTO ESTÁTICO
Segundos
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
ID
IDC_STATIC_M1NUTOS
Segundos
Estatic Text
m_static_minutos
CStatic
115
o Pertenece a la Clase: CMONITORJCMPDIg
Text Properties
General I Styles | Extendédseles |
ID: |IDC_STATIC_MINUTQS jj £aption:
P" Visible |7 firoup f" Help ID
f" Dis^bled I~ Taijstop
FUNCIÓN: IDENTIFICAR A UNA CAJA DE TEXTO ESTÁTICO
Comienzo:
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATIC
Comienzo:
Estatic Text
CMONITORJCMPDIg
TeKt Properties ViilGeneral Styles | Extended Styles |
ID: |IDC_STATIC
17 Visible |7 QIQUP
J Caption:
r~ Help ID
Disjbled \~ Tafeslop
FUNCIÓN: MOSTRAR LA FECHA ACTUAL
116
I Lunes ,25 de Febrero de2GC2-¿J
ID
IDC DATETIMEPICKER1
Date Time Picker
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase: CMONITORJCMPDIg
Date Time Picker Properties^_- k L k
-W Y General I Styles | Extendédseles |
ID: DC DATETIMEPCKER1
|7 Visible r firoup P help ID
F? Disabled P Tabstop
FUNCIÓN: MOSTRAR LA HORA ACTUAL
57:24:36 PM
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
ID
IDC DATETIMEPICKER2
Date Time Picker
1
117
o Pertenece a la Clase: CMONITORJCMPDIg
Date Time Picker Properties
f Geneial I Styles | Extendédseles
Visible r Group T Help ID
Disabled l~~ Tabstop
FUNCIÓN: IDENTIFICAR TEXTO DE DATOS A ENVIAR:
Monitoreandoa:
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATICSECENV
Monitoreando a:
Estatic Text
CMONITORJCMPDIg
Tent Properties
General | Styles | Extended Styles |
1DC STATICSECENVID:
W Visible
P Disábled
Caption: |Monitoreando a:
Group F Melp ID
Tabstop
118
FUNCIÓN: IDENTIFICAR TEXTO DE DATOS ENVIADOS
o Identidad:
o Valor:
o Caption:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
Destino:
ID
IDC_STATICSECENV2
Destino:
Estatic Text
CMONITORJCMPDIg
Date Time Picker Properties ^ OIElilOlSliFI
QBUB B HIHi^•Tt llinr nATPTiMppirk'p MvIki ^^^^^^^^^^^^^^^^^^^^^^^^^^HI
17 Visible
\y Disabled
\~ Group r~ Help ID
l~ Tabstop
FUNCIÓN: MOSTRAR (CONO
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
ID
IDC_STATIC
IDIJRED2
Icón
119
o Pertenece a la Clase: CMONITORJCMPDIg
Picture Properties
General Styles | Extendédseles
10: |IDC_STATIC jj Tupe: [icón
F7 Visible I~ firoup
r~ Disabled f Tabstofi
r Help ID
Image:
Color:
FUNCIÓN: MOSTRAR (CONO
:-:\
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATIC
IDIJFACE
Icón
CMONITORJCMPDIg
Picture Properties -uial-W f General 1 Styles | Extendédseles |
]D: |IDC_STATIC jj Tupe: flcoñ
F/ Viable r £roup
P" Disabled f" Tabslop
r Help ID
Image:
Color:
FUNCIÓN: MOSTRAR ICONO
120
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATIC
IDIJRELOJ
Icón
CMONITORJCMPDIg
Piclure Properlies xl
-W 1P General | Styles | Extended Styles
ID: |IDC_STATIC
F? Visible f Group
f~ Disabled I~ Tabstofi
r Help ID
Icón
Image: |[1¡1W¡1MÍ!ÍJ
Color: I
FUNCIÓN: MOSTRAR ICONO
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
ID
IDC_STATIC
IDIJREDM
Icón
121
o Pertenece a la Clase: CMONITORJCMPDIg
Picture Properties
-W ? General | Stytes \d Styles
ID: |IDC_STATIC J Tupe: (Icón
P Visible r~ firoup
P Disabled f~ Tabstpp.
r Help ID
FUNCIÓN: MOSTRAR (CONO
d
•' rt
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATIC
IDIJEXIT
Icón
CMONITORJCMPDIg
Picture Properties
General I Styles I Extended Styles I
JD: JIDC.STATIC
(v Visible l~ firoup
r Disgbled T
Tupe: (icón
|UUU£1U_ ,Color:
122
FUNCIÓN: MOSTRAR BITMAP
RESULTADOS DELMONITOREO
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATIC
IDB_BRESULTADOS
Bitmap
CMONITORJCMPDIg
Pícture Prooerties ^ ^ É9^B<3|
-W f General | Styles j Extendédseles |
ID: |IDC_STATIC jj Tupe: | Bitmap J
•rA' T^^HMtfTrrr ^^Hm r ünL; HR^MI i/-.i.-i,^nHi
UisAüleü 1 l auiluy _ . pColor; |
P Help ID
'— — — j
d
FUNCIÓN: MOSTRAR BITMAP
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
ID
IDC_STAT1C
1DB_BLINEVERDE
Bitmap
123
o Pertenece a la Clase: CMONITORJCMPDIg
Picture Properties
General Styles Extended Styles
JD: |IDC_STATIC
I* V¡£¡ble F firoup
F Disabled P Tabstofi
r Help ID
FUNCIÓN: MOSTRAR BITMAP
Irsage:
Color:
o Identidad:
o Valor:
o Image:
o Tipo:
o Variable Asociada:
o Tipo de Variable:
o Método:
o Pertenece a la Clase:
ID
IDC_STATIC
IDB_BLINEAZUL
Bitmap
CMONITORJCMPDIg
Picture Properties
General Styles Extendédseles
ID: | I D C _ S T A T Í C ^ j Tupe: JBiímap
R Visible F fíroup Ifljage: |imaailg|güBfBT
F Disabled F Tabstoo _ iColor:
F Help ID '
124
2.5.2.1 Presentación de la Ventana Principal
MONITOR ICMP
Ayuda
-SELECCIONE -r POTOr MONITOREOAUNAREDLOCAL
—-TIEMPOS -
r TIEMPO REAL
r UNA SOLA VEZ
Haciendo PING a IP;
Hacer POTO durante: \. Cada., Segundo*
Comienzo: p'M11'
Monitoreando a:
M y_d
Destino:
SampleLístboxítemsUb Ub tab
HACER PING
IMPRIMIR
InicUlizar Programa
RESULTADOS DEL MONITOREO
SamplcLístboxítemstab tab tab
Fig. 2.9 Presentación de la ventana principal del Proyecto
2.5.3 IMPLEMENTACIÓN DE UN MENÚ
Para crear un menú para este proyecto se deberá considerar a este como un
Recurso, mediante el MFC AppWizard creamos la aplicación y la llamaremos:
MENU1, luego lo agregaremos a la ventana de Diálogo principal.
Este menú será creado para escoger 3 opciones con las características
siguientes:
~~ ACCIONES SELECCIONAR A£UDA j
o OPCIÓN ACCIONES:
o Monitorear
o Inicializar
125
o Imprimir
o Salir
o OPCIÓN SELECCIONAR
o Ping
o Monitoreo
o Una sola vez
o Tiempo Real
o OPCIÓN AYUDA
o Ayuda
o Acerca de Monitoreo.
ACCIONES 5ELE-
MonitorearInicializarImprimirSalir
SELECCIONAR
Ping
MonitoreoUna Sola vezTiempo Real
AVUDA
AyudaAcerca dé Monitoreo
Estas opciones del menú estarán asociados a los siguientes métodos:
o OPCIÓN ACCIONES:
o Monitorear, método asociado: OnBsend( )
o Inicializar, método asociado: OnBI_impiar( )
o Imprimir, método asociado: OnPrint( )
o Salir, método asociado: OnBend( )
126
o OPCIÓN SELECCIONAR
o Ring, método asociado: OnRsend( )
o Monitoreo, método asociado: OnReceive( )
o Una sola vez, método asociado: OnUnavez()
o Tiempo Real, método asociado: OnTreal()
o OPCIÓN AYUDA:
o Ayuda
o Acerca de Minitoreo, método asociado:
OnAyudaAcercademonitoreo( )
A continuación se muestra la Configuración de las propiedades de los Controles
del Menú que será acoplado al Diálogo principal de la aplicación
FUNCIÓN: MOSTRAR LA OPCIÓN ACCIONES DEL MENÚ.
Menú ítem Properties ra^.Trv'Fxit£&&j&'.-&£iGeneral Extendédseles |
ID: |
f~ Separ-ator P" Pop-up P l]]act¡ve Break: [None
r~ Oieckcd r~ Grayed !~~ Hejp
Prompt:
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
&ACCIONES
Menú
IDR MENU1
127
FUNCIÓN: PRESENTAR LA OPCIÓN Monitorear
Menú ítem Propertiea
.? General I Extended Styles |
ID; |ID_ACCIONES_MONITO jj £aplion; |!cMon¡lorear
P Sepa,rator P Pflp-up P lj]ac(ive fireak; ¡None
r Diccked T Grayed P Hejp¡
IMONITOREA UN DISPOSITIVO CONFIGURADO CON UNA I
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_ACCIONES_MONITOREAR
&Monitorear
Menú
OnBsend( )
IDR MENU1
FUNCIÓN: PRESENTAR LA OPCIÓN Inícíalizar
Menú ítem Properties
f General Extended Styles |
ID: |D_ACCIONES_INICIAUZ £aption:
**%&
P Sepjrator f" Pfip-up P Inactive fireak: fÑone
P Checfced P grayed P Hejp
Projrpt:
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_ACCIONES_INICIALIZAR
&lnicializar
Menú
OnBLimpiar( )
IDR MENU1
128
FUNCIÓN: PRESENTAR LA OPCIÓN Imprimir
'* ;Menú ítem Properües
General Extendédseles
ID: |lD_ACCIONES_IMPRIMIR^j
l~~ Separator |~~ Pop-up I~~
F" Checfced l"~ Graved V
£aption:
Inactive
Hejp
\marnBreak: |None jj
Prorrjpl: |
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_ACCIONESJMPRIMIR
Im&primir
Menú
OnPrint( )
IDR MENU1
FUNCIÓN: PRESENTAR LA OPCIÓN Salir
Menú ítem Properties )'> XÍ> -J
Genera! Extendédseles
ID
rr
|ID_ACCIONESSeparator \~
Checked P
.SALIR
Pop-up
Grayed
drr
Caption: iB^SUt]
Inactive fireak: ¡None ^J
Hejp
Prompl: |
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_ACCIONES_SALIR
Sa&lir
Menú
OnBend( )
IDR MENU1
129
FUNCIÓN: MOSTRAR LA OPCIÓN SELECCIONAR DEL MENÚ.
Menú ítem Properties
ID:
General Extendédseles
P Separator I? Pfip-up P Igactive fireafc [Nona
P ChecJsed P fif^ed P Hejp
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
&SELECCIONAR
Menú
IDR MENU1
FUNCIÓN: PRESENTAR LA OPCIÓN Ping
Menú ítem Properíies
? l: General I Extended Styles
y] £aption: |P&¡ng!ID SELECCIONAR PINGID:-. . • „ ; ; • • . - . . . . • . - - . . - ,-Separator P P$fi-up P (¿active fireafc JNone
P,rChecJsed. P ürayed P Hejp : \ Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_SELECCIONAR_PING
P&ing
Menú
OnRsend( )
IDR MENU1
130
FUNCIÓN: PRESENTAR LA OPCIÓN Monitoreo
?¿' ":'í
Menú ítem Propettit •'1x1
General /Extended Sljil
ID: ECCIOMAR MONITOREO ^J Caplion:
P Sepflrator I" Pflp-up P Inactivo Bréale JNone
P Chec^ed P Grayed T Help
Ptoifjpt: I
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_SELECCIONAR_MONITOREO
&Monitoreo
Menú
OnReceive( )
1DR MENU1
FUNCIÓN: PRESENTAR LA OPCIÓN Una sola vez.
Menú ítem Ptoperties
General Extended Styles
SELECCIONAR UNAVEZ ~^J £aption: |&Una Sola vezID:— ^—— — • jii.—" — •
P Sepafator P Pflp-up P loaclrvc Eteak: [
P Chedsed P ürayed P Hcjp
PfprjDpt [
one
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_SELECCIONAR_UNAVEZ
&Una Sola vez
Menú
OnUnavez( )
IDR MENU1
131
FUNCIÓN: PRESENTAR LA OPCIÓN Tiempo Real
Menú ítem Properties
General I Extendédseles
ID: ID SELECCIONAR TREA^I Caption: |i — — i 11 — i •
l~~ Separator l~~ Pop-up T~ lj]aciive fireak: |None
r~ Checked f~ grayed í"* Help
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_SELECCIONAR_JREAL
Tiempo &Real
Menú
OnTreal( )
IDR MENU1
FUNCIÓN: MOSTRAR LA OPCIÓN AYUDA DEL MENÚ.
Menú ítem Properties
-W ^ General | Extendédseles |
ID: |
f SeparatoE W Pflp-up
F" Checked 1"™ Grayed
J Caption: \WM
P Inaclive Break:
r Hejp
BSBIP IP tíiíí
a| None _^J
Piompt: |
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
A&YUDA
Menú
IDR MENU1
132
FUNCIÓN: PRESENTAR LA OPCIÓN Ayuda
'j
Menú ítem Properties
General Extended Styles
Caption:^^I — —..
P Separator P Pgp-up P Inactivo Break: [Ñone
P ChecJsed P .Grayed P Hejp
Prornpt:
I
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_AYUDA_AYUDA
A&yuda
Menú
IDR MENU1
FUNCIÓN: PRESENTAR LA OPCIÓN Acerca de Monitoreo
Menú ítem Properties
^Acerca de Monitoreo
"W Y General I Extended Styles
ID: |ID_AYUDA_ACERCADEM^J Caption: (
P Sepa/ator P Pfip-up P Inactive Break: |None
P Checked P Carayed P Hejp
Prornpt: |
o Identidad:
o Valor:
o Caption:
o Tipo:
o Método Asociado:
o Pertenece al Recurso:
ID
ID_AYUDA_ACERCADEMONITOREO
&Acerca de Monitoreo
Menú
OnAyudaAcercademonitoreo( )
IDR MENU1
133
2.5.3.1 Presentación de la Ventana Principal incluida el menú.
E3MONIIGR ICMP
'[ACOONES SELECOONAR AYUDA1 Montoiewi Incwfaar
I IfóB^fóKfflHHWlfiag'BliiMHBitfldPBtyro
I
'— SELECCIONE—PING
MONTTOREO AUNARSE LOCAL
TIEMPOS-r -nEMPOBEAl.
f UNA SOLA VlEZ
.Ayuda
Hadando PING a IP: ¡localhost f
Comienzo. '^"
Momtoreando a:
May i5,*oyj
_ |
[11.25 56 UI -jj
RESULTADOS DEL MONITOREO
I
IMPRIMIR
Iniaatizar Programa f I - •
Fig. 2.10 Presentación de la ventana principal del Proyecto incluido un menú
2.5.4 IMPLEMENTACIÓN DE LAS CLASES
Cuando se creó el proyecto usando el AppWizard de MFC, se formaron dos
clases principales:
o Clase CMONITORJCMPDIg tipo pública y heredada de la clase Cdiaiog.
o Clase CMONITORJCMPApp tipo pública y heredada de la clase CWinApp
134
2.5.4.1 Clase CMONITORJCMPDlg
Esta clase heredada de la Clase Base CDialog de la MFC, nos permite darle
funcionalidad a este proyecto una vez que ingresemos el respectivo código a
todos los controles de la ventana de aplicación creada.
Dentro del archivo de cabecera MONITORJCMPDIg.h se establecerán las
variables que corresponden a darle funcionalidad a la ventana de Diálogo, aquí
también se definirán las estructuras de la Cabecera IP e ICMP que serán
necesarias para que el programa de monitoreo envíe datos a través de la red y los
traiga de vuelta cuando se solicite una respuesta de eco.
La Clase CDialog es derivada de la clase CWnd y por ende deriva a la clase
CMONITORJCMPDIg las funcionalidades siguientes:
• El constructor de la clase CDialoq::CDialoq. requiere dos parámetros: el
nombre de la plantilla de diálogo que utilizará (la que se haya diseñado en
los recursos) y una referencia a la ventana padre del diálogo (casi siempre
es la ventana que pide que se visualice). También existe un constructor por
defecto (sin parámetros) orientado a la creación de diálogos no modales.
• La función CDialog::DoModal, aplicada sobre un objeto construido
previamente permite visualizarlo en modo modal. Esta función es síncrona
en el sentido de que no devuelve el control a la función llamante hasta que
no se cierre el diálogo. Devuelve un valor que podemos utilizar para indicar
distintas opciones de cierre del diálogo.
• Función CDialoq::OnlnitDialoq. para inicializar el diálogo.
• Funciones CDialog::OnQk v CDialog::OnCancel que permiten realizar las
operaciones de confirmación o cancelación del objetivo del diálogo.
135
2.5.4.2 Clase CMONITOR_ICMPApp
Esta clase se origina cuando se creó el proyecto a través del AppWizard de la
MFC, representa una aplicación Windows. Cada programa debe tener un objeto
global o estático, es decir que exista durante todo el tiempo, de una clase propia
derivada de CWinApp. De hecho, otra característica de la programación basada
en MFC es que el código carece de programa principal, la ejecución comienza
con la creación del objeto CWinApp.
En realidad, es la MFC la que provee una función principal estándar WinMain
(este es el nombre que toma para las aplicaciones Windows) que utilizarán todos
los programas. Los pasos básicos que sigue son tres: inicialización del programa,
entrada en el bucle de mensajes y finalización del programa.
• Inicialización del programa. Se obtiene en dos fases distintas: inicialización
de la aplicación e inicialización de la instancia de la aplicación.
• Bucle de mensajes. Es la parte central de la ejecución, no finaliza hasta
que no se cierra la ventana principal.
• Finalización de la instancia. Permitirá liberar recursos, cerrar ficheros de
trabajo, confirmar operaciones, etc.
2.5.5 IMPLEMENTACIÓN DE LAS ESTRUCTURAS DE CLASE
Para el caso de este programa, se necesitará crear dos estructuras dentro de el
archivo de cabecera MONITORJCMPDIg.h , de la clase CMONITORJCMPDIg,
las estructutas a crear son tres:
o Estructura: struct JpHeader. que definirá el tipo de variables de un
datagrama IP.
o Estructura: struct JcmpHeader: que definirá el tipo de variables de un
paquete ICMP.
o Estructura: struct JcmpHeaderTSCO: que definirá el tipo de variables de
un paquete ICMP para una solicitud de ECO.
136
La estructura struct JpHeader, se la definirá de la siguiente manera:
typedef struct JpHeader
BYTE
BYTE
WORD
WORD
WORD
BYTE
BYTE
WORD
¡p_verlen;
ipjos;
ipjen;
ipjragoff;
ip_ttl;
ip_proto;
ip_chksum;
IN_ADDR ip_src_addr;
IN_ADDR ip_dst_addr;
}IpHeader;
// Longitud de la versión y encabezado
// Tipo de servicio
// Longitud total del paquete
// Identificación del datagrama
// Offset del fragmento
// Tiempo de vida
// Protocolo
// Suma de comprobación
// Dirección fuente
// Dirección destino
La estructura struct JcmpHeader, se definirá así:
typedef struct JcmpHeader
BYTE
BYTE
USHORT
USHORT
USHORT
ULONG
} IcmpHeader;
IcmpType;
IcmpCode;
IcmpChecksum;
Icmpld;
IcmpSeq;
IcmpTimestamp;
// Tipo de sevicio ICMP
// Tipo de Subcódigo
// Suma de comprobación
// Identidad
// Secuencia
// no está dentro del campo
de cabecera ICMP, pero se usa.
La estructura _lcmpHeaderT8CO, para enviar una solicitud de eco será:
typedef struct JcmpHeaderTSCO
BYTE IcmpType;
137
BYTE
USHORT
USHORT
USHORT
ULONG
} IcmpHeaderTSCO;
IcmpCode;
IcmpChecksum;
Icmpld;
IcmpSeq;
IcmpTimestamp;
// Tipo de subcódigo
2.5.6 DEFINICIÓN DE VARIABLES DE LA CLASE CMONITORJCMP_Dlg
Las siguientes son las definiciones para las variables que se usan dentro de la
Clase CMONITOR_ICMP_Dlg tipo públicas
BYTE
BYTE
LPIcmpHeader
LPlpHeader
LPIcmpHeaderTSCO
SOCKET
DWORD
DWORD
DWORD
int
int
int
LPSTR
LPSTR
int
int
int
int
int
lcmpSendPacket[100];
lpRecvPacket[100);
pIcmpHeader;
plpHeader;
plcmpHeaderT8CO;
icmpSocket;
icmpRoundTripTime;
icmpPingSentAt;
icmpPingReceivedAt;
icmpRcvLen;
icmpCurSeq;
icmpCurld;
nomHostSíg;
nomHostSigFin;
a;
xx;
yy;zz;
t;
//buffer de envío de datos
//buffer de recepción de
datos
//Puntero a una estructura
//Puntero a una estructura
//Puntero a una estructura
//Nombre del Socket
//Tiempo de viaje redondo
//Tiempo al envío
//Tiempo a la recepción
//Long. De datos recibidos
//Secuencia ICMP
//Identidad ICMP
//Puntero a la IP inicial
//Puntero a la IP final
//variable tipo entero
//variable tipo entero
//variable tipo entero
//variable tipo entero
//variable tipo entero
138
t.v•,r~ « .
SOCKADDRJN
LPHOSTENT
SOCKADDRJN
char
char
char
char
icmpSockAddr;
hostdest;
rcvSockAddr;
t¡podepaquete[100];
direccionfuente[100];
direcciondest[100];
descripc¡on[200];
//Estructura de dirección del
socket de envío
//Estructura de información del
anfitrión en internet
//buffer de datos
//buffer de datos
//buffer de datos
//buffer de datos
2.5.7 IMPLEMENTACIÓN DE LOS CONTROLES - ANÁLISIS DE MÉTODOS
Para darle funcionalidad al programa se analizará que función va a realizar cada
control y su método asociado, en la mayoría de los controles se necesita agregar
una parte de código para inicializar las variables, estableciendo valores de inicio
para la mayoría de ellas. Se verá que se repite la función UpdateData, ésta es
clave para trabajar con variables de control en Visual C++, ésta toma la
información de las variables y actualiza los controles en la pantalla con los valores
de las variables, también toma información de los controles y llena las variables
agregadas con cualquiera de los valores modificados por un usuario.
Si el argumento es FALSE, los valores de las variables se pasan a los controles
de la ventana. Si el argumento es TRUE, las variables se actualizan con cualquier
cosa que aparezca en los controles de la ventana.
Para leer las variables y obtener su valor actual, llamaremos a UpdateData con un
valor de TRUE antes de leer cualquiera de las variables.
Vamos a analizar cada uno de los controles de nuestro programa.
139
2.5.7.1 Función OnBend( ), para SALIR del programa.
Cuando ejecutamos el botón "SALIR", se abrirá una ventana de diálogo la cual
permitirá confirmar si en verdad el usuario desea salir del programa. La
funcionalidad es la siguiente:
void CMONITOR_ICMPDig::OnBend()
{
int ¡Resultado; //Esta variable captura la selección del botón
//Pregunta al usuario
¡Resultado - MessageBox("Presione Si o No ",
"¡USTED CANCELARÁ EL PROGRAMA! ADIÓS!!",
MB_YESNO \
//Determina en cuál botón hizo clic el usuario
//Le proporciona al usuario un mensaje que muestra en cuál botón se hizo clic
switch (¡Resultado)
{
caselDYES: // ¿El botón Yes?
OnOK();
//Actualiza el diálogo
UpdateData (FALSE);
//m_strmensaje = "Usted canceló el programa";
break;
caseIDNO: // ¿ El botón No?
break;
El mensaje que se muestra al usuario es el siguiente:
140
¡USTED CANCELARA EL PROGRAMA!
Presione Si o No
rs!*' • -j
i-.":', —"J
Ves
Fig. 2.11 Presentación de la ventana de diálogo de la Opción Salir.
2.5.7.2 Función OnBLimpiar( ), para INICIALIZAR la Pantalla.
Cuando ejecutamos el botón "Inicializar Programa", nos abre una ventana de
diálogo que permite escoger al usuario si desea o no Inicializar la Pantalla actual y
volver a la pantalla inicial del programa.
Inicializar Programa
Para que esto suceda ingresamos el siguiente código:
voidCMONITOR_ICMPDIg::OnBLimpiar()
int ¡Resultado; //Esta variable captura la selección del botón
//Pregunta al usuario
¡Resultado = MessageBox("Presione Si o No ",
"¿Desea Reiníciar el programa?",
MB__YESNO \
//Determina en cual botón hizo clic el usuario
//Le proporciona al usuario un mensaje que muestra en cuál botón se hizo clic
switch (¡Resultado)
{
caselDYES: //¿El botón Yes?
if (mJSend == 0)
{
m_strHName ~ "localhost" ;
m_strHNameFin = "";
141
m_int_hora1 = 1;
m_int_hora2 = 2;
mjminutos = 60;
//Actualiza el diálogo
UpdateData (FALSE);
m_ctlListSend. ResetContentf);
m_ctlListRcv.ResetContent();
if(m_iSend~
m^strHName = "127.0.0.1";
m_strHNamef=in = "127.0.0.2";
mjnt_hora1 - 1;
m_int_hora2 = 2;
mjminutos = 60;
//Actualiza el diálogo
UpdateData (FALSE);
m_ctlU'stSend. ResetContentQ;
m_ctlListRcv. ResetContentQ;
break;
case IDNO: // ¿ El botón No?
break;
Como se observa inicializa la pantalla para dos casos, el primero si estamos en la
Opción PING, y el segundo para cuando estamos en la opción MONITOREAR.
Al usuario se desplegará la siguiente información:
¿Desea Reiniciar ef progratttd
Presione 5i o No
Yes No
Fig. 2.12 Presentación de la ventana de diálogo de la Opción Inicializar Programa.
142
2.5.7.3 Función OnRsend(), para SELECCIONAR la opción PING.
--SELECCIONEPING
El usuario en la ventana principal del programa podrá escoger la opción PING ó
MONITOREAR, para cuando selecciona la opción PING, se enlazará al método
OnRsend( ), el cual activará sólo una entrada de datos para la dirección IP y el
control para ejecutar un monitoreo se cambiará a: "HACER P&1NG". Esto lo
conseguimos agregando a la función, el código siguiente:
HACER PING
void CMONITOR_ICMPDlg::OnRsend()
UpdateData(TRUE); //Se debe actualizar el botón marcado
if(m_iSend == O && mjreal == 0) //PING EN TIEMPO REAL
{
GetDlgltem(IDC_EHOSTNAME)->EnableWindow(TRUE);//Habilito la variable
GetDlgltem(IDC_EHOSTFIN)->EnableWindow(FALSE);//Deshabilitamos la variable
GetDlgltem(IDC_minutos)->EnableWindow(TRUE); //Habilito la opción minutos
GetDlgltem(IDC_hora2)->EnableWindow(FALSE);
GetDlgltem(IDC_STATIC_HINICIO)->EnableWindow(TRUE);//Habilito la variable
GetDlgltem(IDC_hora1)->EnableWindow(TRUE);//Habilitamosla variable
GetDlgltem(IDC_STATIC_HFIN)->EnableWindow(TRUE); //Habilito la opción minutos
GetDlgltem(IDC_STATIC_INTERVALO)->EnableWindow(TRUE);
GetDlgltem(IDC_STATIC__MINUTOS)->EnableWindow(TRUE);
m_strHName = "Iocalhost";//Predetermino uan dirección de Host
m_strHNameFin = "";
mjnt__hora1 = 1;
m_int_hora2 = 2;
mjminutos = 1;
m_ctlSend.SetWindowText ("HACER P&ING");//Modifico rótulo de botón
m_static_minutos. SetWindowText ("Segundo ");
m_static__hostname.SetWindowText ("Haciendo PiNG a IP:");
143
m^staticjpfínal. SetWindowText (" ");
m_static_hÍnÍdo.SetWindowText ("Hacer PING durante:");
mjstatícjifin. SetWindowText ("minutos");
m^staticJntervalo.SetWindowText (" Cada...");
UpdateData(FALSE) /Retomo datos a la caja de edición.
iffmJSend == O && mjreal == 1) //PING UNA SOLA VEZ
GetDlgltem(lDC_EHOSTNAME)->EnableWindow(TRUE)S/Habilito la variable
GetDlgltem(IDC_EHOSTFIN)->EnableWindow(FALSE)S/Deshabilitamos la variable
GetDlgltem(IDC_minutos)->EnableWindow(FALSE); //Hbil'rto la opción minutos
GetDlgltem(lDC_hora2)->EnableWindow(FALSE);
GetDlgltem(IDC__STATIC_HlNICIO)->EnableWindow(FALSE);//Habilito la variable
GetDlgltem(IDC_hora 1)->£nable Window(FALSE) ¡//Deshabilitamos la variable
GetDlgltem(IDC_STATIC_HFIN)->EnableWindow(FALSE);
GetDlgltem(IDC_STATICJNTERVALO)->EnableWindow(FALSE);
GetDlgltem(IDC_STATIC_MINUTOS)->EnableWindow(FAL$E);
mjstrHName = "localhosty/Predetermino uan dirección de Host
m_strHNameFin = "";
mjnt_hora1 = 1;
m_int_hora2 = 2;
mjminutos = 1;
m_ctlSend.SetWindowText ("HACER P&ING");//Modifico rótulo de botón
m_síatic__minutos. SetWindowText ("Segundos");
m_static__ho$tname.SetWindowText ("Haciendo PING a IP:H);
mjstaticjpfínal. SetWindowText (" ");
m_static_hinicio.SetWíndowText ("Hacer PING durante:");
mj5tatic_hfin. SetWindowText ("minuto ");
m^staticJntervalo.SetWindowText (" Cada...");
UpdateData(FALSE) ¡//Retorno datos a la caja de edición.
144
2.5.7.4 Función OnReceiveO, para SELECCIONAR la opción MONITOREO A
UNA RED LOCAL
MONITOREO A UNA RED LOCAL
Cuando se seleccione la opción MONITOREO A UNA RED LOCAL, nos
enlazamos al método OnReceive(), en este punto se habilitarán las dos entradas
de datos para la dirección IP tanto de inicio como final y también el botón para
ejecutar un monitoreo se cambiará a: "MONITOREAR".
MONITOREAR
El código es el siguiente:
void CMONITORJCMPDIg::OnReceive() //MONITOREO A UNA RED LOCAL
//m_iSend se iguala a 1
UpdateData(TRUE); //Se debe actualizar el botón marcado
if(m_iSend == 1 && mjreal == 0) //MONITOREO EN TIEMPO REAL
m__strHName = "127.0.0.1";//Elimino dirección alguna
m__strHNameFin = "127.0.0.2";
mjnt_hora1 = 1;
mjnt_hora2 = 2;
mjminutos = 1;
GetDlgltem(IDC__EHOSTNAME)->EnableWindow(TRUE);//Habilitamos la variable
GetDlgltem(IDC_EHOSTFlN)->EnableW¡ndow(TRUE)-//Hab¡litamos la variable
GetDlgltem(IDC_minutos)->EnableWindow(TRUE);//Habilito la opción minutos
GetDlgltem(IDC_hora2)->EnableWindow(TRUE);
GetDlgltem(IDC_STATIC_HINICIO)->Enab!eWindow(TRUE);//Habilito la variable
GetDlgltem(IDC_hora1)->EnableWindow(TRUE);//Deshabilitamos la variable
GetDlgltem(IDC_STATIC_HFIN)->EnableWindow(TRUE);
GetDlgttem(IDC_STATICJNTERVALO)->EnableWindow(TRUE);
GetDlgltem(IDC_STATIC_MINUTOS)->EnableWindow(TRUE);
GetDlgltem(IDC_minutos)->EnableWindow(TRUE);
145
m_cfíSend.$etWindowText ("&MONITOREAR") ///Modifico rótulo de botón
m_static_minutos. SetWindowText ("Minutos");
m__static_hostname.SetWindowText ("Monitoreo desde IP:");
m_staticJpfínal.SetWindowText ("Hasta IP:");
mjstaticjhinicio.SetWindowText ("Monitorear desde las:");
m_static_hfin.SetWindowText ("horas, Hasta las:");
m_staticjntervalo. SetWindowText ("horas, cada:");
UpdateData(FALSE) -//Actualizo la ventana
if(m_iSend == 1 && mjreal == 1) //MONITOREO UNA SOLA VEZ
m^strHName = "127.0.0.1 "¡//Elimino dirección alguna
m^strHNameFin = "127.0.0.2";
mjnt__hora1 = í;
mjnt__hora2 = 2;
mjminutos = 1;
GetDlgltem(lDC_EHOSTNAME)->EnableWindow(TRUE);//Habilitamos la variable
GetDlgltem(IDC_EHOSTFIN)->EnableWindow(TRUE);//Habilitamos la variable
GetDlgltem(IDC_minuíos)->EnableWindow(FALSE); //Deshabilito la opción minutos
GetDlgltem(IDC_hora2)->EnableWindow(FALSE);
GetDlgltem(IDC_STATIC_HINICIO)->EnableWindow(FALSE);//Deshabilito la variable
GetDlgltem(IDC_hora1)->EnableWindow(FALSE);//Deshabilitamos la variable
GetDlgltem(IDC_STATIC_HFIN)->EnableWindow(FALSE); //deshabilito opción minutos
GetDlgttem(IDC__STATIC_INTERVALO)->EnableWindow(FALSE);
GetDlgltem(IDC_STATIC_MINUTOS)->EnableWindow(FALSE);
m_ctlSend.SetWindowText ("&MONITOREAR") ¡////Modifico rótulo de botón
m_static_minutos. SetWindowText ("Minutos ");
m_static_hostname,SetWÍndowText ("Monitoreo desde IP:");
m_statícJpfínal.SetWindowText ("Hasta IP:");
mjstatic_hinicio. SetWindowText ("Monitorear desde las:");
m_$tatic_hfín. SetWindowText ("horas, Hasta las:");
m_static_intervalo. SetWindowText ("horas, cada:");
UpdateData(FALSE) y/Actualizo la ventana
146
2.5.7.5 Función OnBsend( ), para EJECUTAR MONITOREO
HACER PING MONITOREAR
La implementación del código para esta función sigue una secuencia la cual se
explicará detalladamente.
Una vez que se ha ejecutado el botón "HACER PING" o "MONITOREAR" según
sea el caso, lo primero que hará este programa es inicializar los buffers tanto de
envió como de retorno de información.
void CMONITOR_ICMPDIg::OnBsend()
{
LPBYTEpbuff;
pbuff = (LPBYTE)lpRecvPacket
memset (pbuff.O,100);
pbuff = (LPBYTE)lcmpSendPacket;
memset (pbuff,0,100);
char szPingBuffer[120];
CStríng s2;
//defino un bufferpara llena deadtos
¡//Especifico el buffer de envío
como una estructura
//Lleno de datos temporalmente
//Especifico el buffer de envío
como una estructura
//Lleno de datos temporalmente
Una vez inicializado los buffers de datos, verificamos la opción que el usuario
escogió en la ventana de diálogo, es decir si escogió hacer "PING" o
"MONITOREO A UNA RED LOCAL", para el caso de hacer "PING", la variable de
control tomará el valor: (mJSend == 0) , para el caso contrario la variable será:
(mJSentí == 1).
Ahora, ponemos en cero la estructura SOCKADDRJN déla clase winsock.h
147
Convertimos la dirección IP ingresada en una cadena en notación decimal para
consultar si corresponde a una dirección IP, caso contrario resolvemos el nombre
del anfitrión, luego recuperamos la dirección IP de la cadena en notación decimal.
UpdateData(TRUE);
LPSTR nomHostSig = T2A((LPTSTR)((LPCTSTR)m_strHName));
memset(&icmpSockAddr,0,sizeof(icmpSockAddr)); //Ponemos en cero la
estructura SOCKADDRJN
unsigned long addr = inet_addr(nomHostSig); //Convierte la dirección IP
en una cadena en notación decimal
hostdest = NULL;
iffaddr == INADDR_NONE)
//Consultamos si la cadena correspondía a una dirección
hostdest = gethostbyname(nomHostSig);
//No corresponde a una dirección, entonces resuelve el nombre del anfitrión
if (hostdest)
//Si se obtiene la dirección IP como un entero largo sin signo
memcpy(&(icmpSockAddr.sin_addr),hostdest->h_addr,hostdest- >hjength)
¡//Copiamos la dirección IP desde la estructura de
//icmpSockAddr.sinJamily = hostdest->h_addrtype;
//información del anfitrión en internet
e/se
MessageBox("No puedo resolver este nombre en la red, Revise la
dirección ingresada!!!", nomHostSig, MB_OK\MB_ICONINFORMATION);
//Desplegamos un mensaje de no poder obtener la dirección del anfitrión
return;
else
icmpSockAddr.sin_addr.s_addr = addr;
icmpSockAddr.sin_family = AFJNET;
//Recuperamos la dirección IP
de la cadena en notación decimal
//Llenamos la estructura
SOCKADDRJN necesaria para Henar TCB
148
Ahora se creará un socket básico y especificamos a ICMP como el protocolo a
utilizar.
icmpSocket = socket (PFJNET, SOCK__RAW,IPPROTOJCMP);
//Crea un socket básico y especifica a ICMP como el protocolo a utilizar
if (icmpSocket == INVALID^SOCKET)
{
MessageBox("No puedo crear un socket básico!!!!!!",
"ICMP", MB_OK\MB_ICONINFORMATION);
//Desplegamos un mensaje de no poder crear socket básico
retum;
Llenamos la estructura ICMP como de Solicitud de eco:
pIcmpHeaderTBCO = (LPIcmpHeaderT8CO)lcmpSendPacket;
memset (pIcmpHeaderTSCO, O, lcmpHeaderT8CQLength);//Pongo en cero los datos
plcmpHeaderT8CO->lcmpType - 8; //Especifico tipo de paquete como de solicitud de eco
plcmpHeaderT8CO~>lcmpCode = 0;
plcmpHeaderT8CO->lcmpChecksum = 0;
plcmpHeaderT8CO->lcmpld - icmpCurld;
plcmpHeaderT8CO->lcmpSeq - icmpCurSeq;
plcmpHeaderT8CO->lcmpTimestamp = GeíTickCountQ;
plcmpHeaderT8CO->lcmpChecksum = Chksum((LPWORD)plcmpHeaderT8CO,
IcmpHeaderTdCOLength);
Enviamos los datos hacia el Host destino,
LPIcmpHeader pIcmpHeader;
pIcmpHeader = (LPIcmpHeader)plcmpHeaderT8CO;
int Result;
ULONG icmpPingSentAt = GetTickCount();
Result = sendto (icmpSocket,(LPSTR) pIcmpHeaderTSCO, IcmpHeaderTSCOLength, O,
(LPSOCKADDR)&icmpSockAddr, sizeof (ícmpSockAddr));
if (Result == SOCKET_ERROR)
149
MessageBoxfNo se puede monítorear la dirección IP ingresada..U!",
nomHostSig, MB__OK\MBJCONEXCLAMATION); //Desplegamos un mensaje de no poder
obtener la dirección del anfitrión
closesocket(icmpSocket);
retum;
Recibimos los datos como una Respuesta de Eco ICMP.
LPSOCKADDR pRcvSockAddr = (LPSOCKADDR)&rcvSockAddr;
int RcvlpHdrLen;
rcvSockAddr.sin_family - AFJNET;
rcvSockAddr.sin_addr.s_addr = INADDR^ANY;
rcvSockAddr.sin_port = 0;
RcvlpHdrLen = sizeof rcvSockAddr;
Result = recvfrom (icmpSockett(LPSTR)lpRecvPacket, 100,0, pRcvSockAddr, &RcvlpHdrLen);
ULONG icmpPingReceivedAt = GetTickCountQ;
if (Result == SOCKET^ERROR)
//icmpSocketError = WSAGetLastError();
MessageBox("No puedo recibir datos desde la dirección IP. Posible problema en la red!!!!1',
nomHostSig, MB__OK\MB_ICONINFORMATION);
//Desplegamos un mensaje de no poder obtener la dirección del anfitrión
closesocket(ÍcmpSocket);
retum;
¡cmpRcvLen = Result;
plpHeader = (LPIpHeader)lpRecvPacket;
// Extrae los bits 4-7 y convierte el número de palabras de 32-bits a bytes
RcvlpHdrLen = (plpHeader->ip_verlen & OxOf)*4;
if (Result < RcvlpHdrLen + ICMP^MIN)
// Too few bytes received
MessageBox("LONGITUD DE DATOS PEQUEÑA, NO ES LA CORRECTA!", "Clcmp::Receive",MB_OK\MB_SYSTEMMODAL);retum;
150
,mJ
plcmpHeader=(LPIcmpHeader)((LPBYTE)lpRecvPacket + RcvlpHdrLen);
Ahora se recupera el tipo y código del paquete de la cabecera ICMP y llenamos
en un buffer la información que vamos a desplegar en nuestra pantalla de
visualización de datos enviados y resultados.
int type = plcmpHeader->lcmpType;
int code - plcmpHeader->lcmpCode;
if((type == 0)&&(code==0))
//recuperamos el tipo de paquete
//recuperamos el código del paquete
//RESPUESTA DE ECO
icmpRoundTrípTime = icmpPingReceivedAt - (plcmpHeaderT8CO->lcmpTimestamp);
wspríntf(tipodepaquete. "Realizando MONITOREO a Host >:
);//mensaje en/a cabecera del recuadro
wspríntf(dir6ccionfuente,HIP:%s'',(LPSTR)inet__ntoa(plpHeader->ip_src_addr));
if(hostdest*=NULL)
wsprintf(descripción,
"El tiempo del viaje redondo a IP [%s] fue de: %d ms.. Host encendido, conectado a la
red ".//mensaje presentado cuando la IP es formato hexadecimal
(LPSTR)in6t_ntoa(plpHeader->ip_src_addr),(ÍcmpRoundTripTime));
if(hostdest!=NULL)
wsprintf (descripción,
"El tiempo del viaje redondo a %s, con IP [%s] fue de: %d ms.. Host activo conectado a la red",
//mensaje cuando ya trae información del PING, la IP es un stríng
hostdest->h_name, (LPSTR)inet__ntoa(plpHeader->ip_src_addr),(icmpRoundTrípTime));
s2 = descripción;
UpdateData(FALSE);
m_ctlListRcv.AddStríng(s2);
}
closesocketficmp Socket);
wsprintffszPingBuffer.^/osF/osr.tipodepaquete.direccionfuente); //DATOS DE LA SEGUNDA
VENTANA DE CONTROL
s2 - szPingBuffer;
UpdateData(FALSE);
m_ctlListSend.AddString(s2);
151
•
Este es el proceso para realizar monítoreo a un dispositivo configurado con una
dirección IP usando teoría de Sockets.
Para el caso que la opción escogida sea MONITOREAR a una Red, tendremos
que realizar un lazo para que se sume una dirección a la dirección inicio y llegue
hasta la dirección final, de la siguiente manera.
ujong Z = ntohl(addr); ///con ntohl convierto un numero de 32 bits de ordenamiento
ujong ZFIN = ntohl(addrfín); //de byte de red a ordenamiento de byte de anfitrión
///////comienza el lazo
ujong DIFERENCIA = ZFIN - Z;
for (int lazo=Z; lazo<=Z+DIFERENCIA; lazo++)
{ujong dirección = htonl(lazo); //con htonl convierto un numero de 32 bits de ordenamiento
//de byte de anfitrión a ordenamiento de byte de red
hostdest = NULL;
if (dirección == INADDR__NONE)
Usamos la función "htohl" para convertir un número de 32 bits de ordenamiento
de byte de red a ordenamiento de byte de anfitrión.
Usamos la función "htonl" para convertir un número de 32 bits de ordenamiento
de byte de anfitrión a ordenamiento de byte de red.
Para realizar un lazo que permita monitorear el número de veces requerido hay
que tomar en cuenta los valores que ingresa el usuario, los valores a ingresar son
el intervalo de horas de monitoreo y cada cuantos minutos requiere obtener una
respuesta del monitoreo. Lo implementamos con el siguiente lazo:
if (mjnt_hora2 > mjnt__hora1)
forfint xx=mjnt_hora 1 *60; xx<=mjnt_hora2*60; xx+=mjminutos ).
152
Esto para cuando requiere hacerse un monitoreo en el transcurso de un día.
Para cuando el monitoreo pasa hasta el siguiente día hay que considearar lo
siguiente:
if (m_Ínt_hora2 < mjnt_hora1)
{yy-24- m_int_hora1 + m_int_hora2;
forfint xx = m_int_hora2*60; xx <= yy*60; xx+=m_iminutos)
153
CAPITULO 3
RESULTADOS Y PRUEBAS
3.1 RESULTADOS
3.1.1 MONITOREANDO DESDE UNA PC NO CONECTADA A RED
Al ingresar una dirección IP cualquiera , el resultado que se obtiene al intentar
monitorear un dispositivo desde una PC que no está conectado a una red es una
Caja de diálogo en la que dice:
"No se puede monitorear la dirección IP ingresada..!!!,
Haciendo PING a IP: (192.168.126.1 **********
Hacer PING durante; fi
Comienzo: (Wednesday, 15 May ,2002
Monitoreando a:
192.168.126.1
Cada... \i
No se puede monitorear la dirección IP Ingresada. .111
OK
Fig. 3.1 Mensaje al monitorear un Host por su dirección IP cuando la PC local está desconectada de
la red
Al ingresar el nombre de un Host, el mensaje será el siguiente:
"No puedo resolver este nombre en la red, Revise la dirección ingresada!!!"
154
I/1
.. ifl*
Haciendo PING a IP: **»»*****»
Hacer PING durante: [i 3 Millutos- K Cada... _»]
Comienzo: [wednesday, 15 May ^
Monitoreando a:No puedo resolver este nombre en la red, Revise la drecdón hgresadal !l
OK
Fig. 3.2 Mensaje al monitorear un Host por su nombre cuando la PC local está desconectada de la red
Si es una dirección de Internet el mensaje será el mismo, ya que no puede
resolver el nombre.
Haciendo PING a IP: vfww.epn.edu.ec **********
Hacer PING durante: -rl Minutos. Cada... [7
Comienzo: jWednesday, 15 May ,2002 23 |gj |i3:39'.43 TJ
Monitoreando a: Destino:www.epn.edu.ee Hfe^SY^-r^"^?
Kr^-¿¿m
No puedo resolver este nombre en lo red. Revise la dirección ingresada! II
OK
Fig. 33 Mensaje al monitorear una dirección de Internet cuando la PC local está desconectada de la
red
Si el usuario ingresa cualquier cadena texto también se desplegará el mismo
mensaje.
155
Haciendo PING a IP: llaskdhldashdfsaf **********
Hacer PING durante: fi _J Minutos.
Comienzo: (Wednesday, 15 May ,2002
Monitc I
13:39:43
laskdhklashdfsaf
No puedo resolver este nombre en la red, Revise la dirección ingresada! II
OK
Cada.
Fig. 3.4 Mensaje al ingresar una cadena de caracteres cualquiera cuando la PC local está
desconectada de la red
Si el usuario ingresa una secuencia de números que no corresponde a una
dirección, el mensaje será: "No se puede monitorear la dirección IP ingresada..!!!,
Haciendo PING a IP: 1112327462354
Comienzo: ("««««sday, 15 May ,2002
Monitoreandoa: 112327462354
*«*»««**#«
Hacer PING durante: [i Jj Minutos. [2
Ti E^J 13:39=43
No se puede monitorear la dirección IP ingresada. .111
OK
Cada... fi~
Fig. 3.5 Mensaje al ingresar una secuencia de números cualquiera cuando la PC local está
desconectada de la red
156
Al realizar un PING al local Host ó a la dirección IP: 127.0.0.1, dará una
respuesta, ya que la PC hace un loop.
En la ventana de datos a enviar se mostrará la IP del Host a monitorear, para el
caso, la dirección: 127.0.0.1.
En la ventana de resultados se tendrá que se realizó un monitoreo a la PC local,
mostrándonos el nombre, el tiempo de viaje redondo que es menor que 1 ms, esto
depende del tipo de procesador de la PC y por último la hora del monitoreo.
SSMQMTGRJCMP
ACCIONES SELECOONHR AYUDA
¡T!&^
-SELECQONE-ff PINGT MONITOREO A UN A RED LOCAL
—TIEMPOS
T TIEMPO REAL
f? UNASOLAVEZ
Haciendo PING a ff:
Hacer PIHC durante: [i IJ Minutos. Cada... fi
Comienzo: p^^S May ,2002 jj
Monitoreandoa: Destino:
Realizando MONITOREO a Host >:Realizando MONITOREO a Host >:
[IP: 127.0.0.1][IP: 127.0.0.1]
RESULTADOS DEL MONITOREO
«) Ayuda
HACER PING
IMPRIMIR
Inicializar Programa
•i tiempo del viaje redondo a ws_84253, con IP [127.0.0.1] fue de: o ms a Us 13:51:11.. RESPUESTA DEL LOCALHOSTil tiempo del viaje redondo a ws_84253, con IP [127.0.0.1] fue de: o ms a las 13:51:14.. RESPUESTA DEL LOCALHOST
Fig. 3.6 Resultados luego de realizar un monitoreo al LOCALHOST
iirÉi
157
3.1.2 MONITOREANDO DESDE UNA PC CONECTADA A UNA RED DE
ÁREA LOCAL
Se tiene varias opciones de monitoreo, la una es hacer un solo PING a cierto
host, otra opción nos permite realizar varios PING al Host requerido,
permiténdonos además escoger con que secuencia deseamos que se realice
dicho monitoreo, otra de las opciones es MONITOREAR a varios dispositivos
conectados a una red por una sola vez y la última opción es hacer un
MONITOREO a varios dispositivos de la red seleccionando además con que
secuencia se desea realizar dicho monitoreo.
Si realizamos un solo PING a través de su IP a un dispositivo ubicado dentro de
una Red de Área local y que además esté conectado a la red, tendremos una
respuesta de que sí se realizó el monitoreo y que el tiempo de viaje redondo es
menos de 1 mílisegundo, para la PC, será O milisegundos.
53 -IONITOR ir-ipACCIONES SELECOOWW ÁVIDA
Ayuda
-SELECCIONEff PING
r MONITOREO A UNA RED LOCAL
-TIEMPOS-
r TIEMPOREAL
ff UNASOLAVEZ
Hadando PINO a IP: [¡"92.166.130.1
Mi ni i i.o
Comi«nzo: w*ln
Monitor«*iKÍoi: D««tíno:
Realizando MONITOREO a Host >: IIP: 192.108.126.1]HACERPING
IMPRIMIR
InicUlizar
RESULTADOS DEL MONITOREO
El tiempo del viaj« redondo a IP [192.166.126.1] fue d«r o mi. j las 14:04:03 Host «noandido, conectado a la red
Fig. 3.7 Resultados luego de realizar un PING a una dirección IP.
158
Cuando se realiza un PING a cierto Host por el tiempo que se desee, se tiene el
siguiente resultado, para el ejemplo se hará durante 1 minuto y cada 3 segundos.
ACCIONES SELECaOWR AWDA
Ayuda
-SELECCIONE-ff PING
T MOrarOREO A UNA RED LOCAL
-TIEMPOS-
í? TIEMPO REAL
T UNASOLAVEZ
Haciendo PINC a IP: 1192-168.126.2
Hacer PING durante: Minutos. Cada... 13 Segundos
Comienzo:
Monitoreandoa:
15JÜ
Destbo:
Realizando MONITOREO a Host >:Realizando MONITOREO a Host >:Realizando MOHITOREO a Host >:Realizando MONITOREO a Host >:Realizando MONITOREO a Host >:Realizando MONITOREO a Host >:Realizando MONITOREO a Host >:
(IP: 192.160.126.3]UP: 192.168.126.2]tIP: 192.168.126.2][IP: 192.168,126.2)(IP: 192.166.126.2][IP: 192.168,126.2][IP: 192.168.126.2]
izl
IMPRIMm
Inicíalizar Programa
RESULTADOS DEL MONITOREO
El tiempo del viaje redondo a IP [192.168,120.2] fue de: i6ms. .a las 14:08:37 Host encendido, conectado a la redEl tiempo del viaje redondo a IP [192.166.126.2] fue de: o ms«a las 14:08:40 Host encendido, conectado a la red.El tiempo del viaje redondo a IP [192.168.120.2] fue de: o ms..a Us 14:08:43 Host encendido, conectado a la red..El tiempo del viaje redondo a IP [192.166,126.2] fue de: o ms. ¿ las 14:06:46 Host encendido, conectado a la red..El tiempo del viaje redondo a IP [192.168.126.9] fue de: o ms. .a las 14:08:49 Host encendido, conectado a la red..El tiempo del viaje redondo a IP [192.166.126.2] fue de: o ms..a las 14:06:52 Host encendido, conectado a la red..El tiempo del viaje redondo a IP [192.168.126.2] fue de: o ms..a Us 14:06:55 Host encendido, conectado a la red..
3^J
Fig. 3.8 Resultados luego de realizar un PING a una dirección IP.
Si monitoreamos a un Host conectado a la red y lo hacemos por su nombre, la
respuesta será que el Host está conectado a la red y que el tiempo de viaje
redondo es de O milisegundos.
159
ACOOtíS SELECCIONAR ÁVIDA
-SELECCIONE -PINGMONITOREÓ A UNA RED LOCAL
—— TIEMPOS-tt TIEMPO REAL
r UNASOLAVEZ
Haciendo PING a IP: jQuitooi
Hacer PING durante: |» Minutos. _-j Cada... - Segundos
Monitowndo a: Destino:
Realizando MONITOREÓ a Hoít
Realizando MONITOREÓ a Host
Realizando MONÍTORBÓ a HostRealizando MONITOREÓ a Host
[IP: 192.166.126.2]
[IP: 193.168.136.2]
[IP: 192.168.136.2][IP: 193.168.126.2]
—
—1
J
HACER PING
IMPRIMIR
Inkializar Programa
RESULTADOS DEL MONITOflEO
El tiempo del viaje redondo a Quito 01 .pecom. cora -ar,El tiempo del viaje redondos Quitooi.pecom.com.ar,El tiempo del viaje redondo a Quitooi.pecom.coiii.ar,El tiempo del viaje redondo a Quitooi.pecom.com.ar,El tíempod«l viaje redondo* Quitooi.pecom.com.ar,El tiempo del viaje redondo a Quitooi.pecom^oat^r,El tiempo del viaje redondea Quitooi.pecom.com.ar,
con IP [193.168.136.2] fue da:con IP [192.168.120 .3 j fue de:con IP [a 92.168.1 a 6. a] fuá de:con IP [193.168.136.2] fue de:con IP [192. i68.ia6.aj fue de:con IP [192.168.196.2] fue de:con IP [192.168.126.2] fue de;
o ros a las 15:37:19..o msa las 15:37:24..o ms a las 15:37:29..o ms a las 15:37:34..o maa las 15:37:39..o ms a ks 15:37:44..o msa las 15:37:49..
Host activo conectado a la redHost activo conectado a U redHost activo conectado a U redHost activo conectado a la redHost activo conectado a la redHost activo conectado a la redHost activo conectado a la red
*J
Fig. 3.9 Resultados luego de realizar un PING a un Host a través de su nombre de red.
El Hostname ingresado fue QuitoOl, la respuesta de eco hace referencia a que se
monitoreó a la dirección IP: 192.168.126.2 y que el nombre está definido en la
tabla de Host, deteminadas por el DNS (Domain Ñame server) como:
quito01.pecom.com.ar.
Se puede saber además a que hora se realizó dicho monitoreó.
Cuando se realiza un PING a una dirección de Internet, lo que se hace es
monitorear a un Host remoto y si está conectado voy a saber el tiempo de viaje
redondo hasta ese dispositivo.
ACOOMCS SELECCIONAR AYUDA
-SELECCIONEff PINCr MONTTOREOAUNAREDLOCAL
- - --- TIEMPOSff T1EMPOREAL
r UNASOLAVEZ
Haciendo PING a IP:
Hacer PINC durante: i Minutos. Cada...
Comien»: -
Monitor«andoa: Destino:
Realizando MONITOREO a HostRealizando MONITOREO a HostRealizando MONITOREO a Host
Realizando MONITOREO a HostRealizando MONITOREO a Host
[IP: 192.188.57.244][IP: 192.188.57.244][IP: 192.188.57.244]
[IP: 192.168.57.244][IP: 199.188.57.244]
RESULTADOS DEL MONITOREO
^ Segundos
HACERP1NC
IMPRIMIR
Iniculizar Programa
El tiempo d«l viaje redondo a epn.edu. ec, con IP [192.166.57.244] fue de: 1547 me a \AS 15:45118..Q tiempo del viaje redondo a epn.edu.ec, con IP [192.188.57.244] fue de: 2187 ms a las 15:45=30»a tiempo del viaje redondo a epn.edu.ec, con IP li9=-i68.57.244Í Fue de: 1703 ms a las 15:45:42..Q tiempo del viaje redondo a epn.edu.ec, con IP [192.188.57.244] fue de: 1610 ms a las 15:45:53»El tiempo del viaje redondo a epn.edu.ec, con IP [192.188.57.244] fue de: 1828 ms alas 15:46:05..El tiempo del viaje redondo a epn.edu.ec, con IP [193.166.57.244] fae de: 1578 ms a las 15:46:17..
Host activo conectado a la r«dHort activo conectado a la redHost activo conectado a la redHost activo conectado a la redHost activo conectado a la redHost activo conectado a U r«d
160
Fig. 3.10 Resultados luego de realizar un PING a una dirección de Internet.
El programa resuelve la IP real del Host asociado a la dirección de Internet, de
los resultados se puede apreciar que el tiempo de viaje redondo es de
aproximadamente 2000 milisegundos, lo que asegura que desde dónde se hizo el
monitoreo hasta el Host destino existen muchos saltos que pueden ser satelitales.
Si se realiza un PING a un Host remoto que se encuentre en una red WAN,
también se recibirá respuesta de eco.
161
Ayuda— SELECCIONE —
PING
MOHITOREO A UNA RED LOCAL
TlEMPOS-
TCEMPOREAL
UNASOLAVEZ
Haciendo PING a IP:
Hacer POTC durante: ] Minutos, Cada... 15 ^l Segundos
Comienzo: J!*'«to*sday, 15 M
Monitoreandoa;
Realizando MONITOREO a Host —
Destino:
, rrn. *• * n . M ni
— >: [IP: 54.113.10.2]
HACER P1HG
IMPRIMIR
Tniculiar ProgranuRESULTADOS DEL MONITOREO
El tiempo <d«l viijer«dondo a ctioi.p^oom.cora^r, con IF [54.113.10.2] fue d«: 594 mi a las 15:51:53- Host activo conectado a U r«dEl tiempo del viaje redondo a ctaoi.pecom.córner, con IP [5 .113.10,3] fue d«: 734 ms a las 15:52:09.. Ho»t activo conectado a la redEl tiempo d«l viaje redondo a ota o i.pecom .córner, con IP [54.113.10.2] fue da: ¿09 mía las 15:52:25.. Host activo conectado a la redEl tiempo del viaje redondo a cUoi.pecom.com.ar, con IP [54.113.10.2] fue d«: 703 ms a las 15:52:40.. Host activo conectado a la red
Fig. 3.11 Resultados luego de realizar un PING a un Host remoto, parte de la red VVAN
El dispositivo remoto se llama CTA01 y se encuentra interconectado al host local
desde donde se realiza el PING mediante un enlace satelital, por lo mismo el
programa resuelve la IP y el tiempo de viaje redondo de 1000 ms, se trata de un
dispositivo que está conectado al host Local a través de un doble salto satelital.
Si la dirección que ingresó el usuario es cualquier cadena de caracteres, el
programa desplegará el siguiente mensaje: ("No puedo resolver este nombre en la
red, Revise la dirección ingresada!!!",), se debe a que los datos que ingresó el
usuario no corresponden a una dirección IP.
162
ft':Gi>£S SELECCIONAR
PINGMOHTTOREOAUNAREDLOCAL
Haciendo PING a IP; wwhrsctjsrj
Hacer PirJG (Kirdíif?: i -J Minutos. 2 •»!
Corawnzo: |W*dnMday. 15 M.iy
Monitoreando a:No puedo wotar Mta nombra «n U r«d, R*vto la *ecdófi hgroMdalll
Inicializar Programa
RESULTADOS DEL MONITOREO
Fig. 3.12 Resultados cuando la dirección ingresada a monitorear es una cadena de caracteres que no
corresponden a una dirección IP
El programa no resuelve nombres que no correspondan al formato de una
dirección IP.
Si se monitores a un conjunto de dispositivos que estén dentro de una red de
Área Local, en principio se ingresará una dirección inicial y una dirección final, si
todas están conectadas a la red, el programa dará como resultados el tiempo de
viaje redondo hasta cada dispositivo y la hora a la que se hizo el mon¡toreo,
indicando que los terminales están conectados a la red. Como opciones se podrá
realizar el monitoreo una sola vez o seleccionar el intervalo de tiempo en el cual
se desea resultados.
163
Se tiene que considerar que para obtener resultados del monitoreo paralelamente
se debe correr el mismo programa haciendo PING al Local Host durante un
intervalo de tiempo considerable
ACCIONES SEUTCaoittR AYUDA
Ayuda
-SELECCIONE^PING
MONITOREO A UNA REDLOCAL
-TIEMPOS-
TIEMPO REAL
UNASOLAVEZ
Monitor» desdelP: 192-168.126.156 HartalP: Ji9a.xi8.ia6.i6g
_ Minutos
Conii«nzo
Morutoroando a: Destino:
Realizando MONITOREO a Host [IP: 192.168.126.159]
Realizando MONITOREO a Host [IP: 192.168.126.161]Realizando MONITOREO a Host [IP: 192.168.126.162]
RESULTADOS DEL MONITOREO
) IMPRIMIRJ
El tiempo del viaja redondo a IP [192.168.126.156] fue de: 16 ms..a las 16:15:54 Host encendido, conectado de la red. .El tiempo del viaja redondo a IP [192.168.126.157] faede: o rns.-a las 16:15:57 Host encendido, conectado de la red..El tiempo del viaje redondo a IP [193.168.126.158] fue de: o res..* las 16:16:00 Host encendido, conectado de la red..El tiempo del viaje redondo a IP [192.168.126.159] fue de: o ras.* las 16:16:03 Host encendido, conectado de la red..El tiempo del viaje redondo a IP [199.168,126.160] fue da: o ms..a las 16:16:06 Host encendido, conectado d« la red..El tiempo del viaja redondo a IP [199.168.126.161] fuá de: o tns.A las 16:16:09 Host encendido, conectado de la red..El tiempo del viaja redondo a IP [192.166.120.162] fue da: oms..¿ las 16:16:1.2 Host encendido, conectado de la red...
^J SALIR
T '}m\
J
d
Fig. 3.13 Resultados obtenidos al monitorear a varios dispositivos de red dentro de una Red de Área
Local.
Como se aprecia en el gráfico, el programa monitorea a los dispositivos en forma
secuencial, y presentando en la ventana de resultados la información de
monitoreo pertinente a cada dispositivo, como son la dirección IP, el tiempo de
viaje redondo y la hora en la que se realizó el monitoreo.
164
3.2 PRUEBAS
Para realizar nuestras pruebas del programa en una red real, se utilizó la Red de
La Compañía Petrolera Pérez Companc Ecuador, la cual es una Red de Área
Local con conexión a una Red WAN con las siguinentes características:
• Red con Topología Ethernet.
• La interconectividad se la realiza con switch Cisco 10 /100 autosensitive.
• PCs con tarjetas de Red 3Com Ethernet 10/100.
• Cableado Horizontal implementado con cable DTP categoría 5e.
• Cableado vertical con fibra óptica multimodo.
La dirección de la red clase C, es 192.168.126.1 hasta 192.168.126.154
Máscara de Red: 255.255.255.0
3.2.1 MENSAJES DE ERROR.
Al monitorear un dispositivo el usuario tiene que ingresar una dirección IP, una
dirección de Internet ó un nombre de Host auténtico, si no lo hace obtendrá un
mensaje de error. Por ejemplo si ingresamos como dato el nombre de un servidor
que no existe, para el caso déla red de prueba se tiene un Host denominado
QUITO02.
Al monitorearlo tendremos el mensaje siguiente:
quitoOZ
No puedo resolver este nombre en la red, Revise la dirección ingresada!!!
OK
Fig. 3.14 Mensaje que indica al usuario que la dirección que ingresó no corresponde a una dirección
de red
165
Cuando se ingresa una cadena de caracteres inválida tenemos el mismo
mensaje.
Cuando el usuario ingresa en el intervalo de horas un valor que no esté entre 1 y
24, el mensaje es el siguiente:
MONITOR_ICMP
Please enter an Integer between 1 and 24,
QK |
Fig. 3.15 Mensaje que indica al usuario que debe ingresr un número entero entre 1 y 24
Si se ingresa una dirección correcta pero en vez de especificar con números las
horas de monitoreo se escribe una cadena de caracteres, el programa no
ejecutará ninguna acción y esperará que se ingrese el dato correcto.
PING-SELECCIONE—
r
Haciendo PING a IP: 1192.168.126.1
Monitorear desde las: f^as horas, Hasta las: |
Fig. 3.16 El usuario debe tener en cuenta de no ingresar una cadena de caracteres
Si por alguna razón la PC no está conectada a la red, el mensaje es el siguiente:
"No se puede monitorear la dirección IP ingresada..!!!, Revise si su PC está
conectada a una RED"
166
Haciendo PINC a ff: Hasta ff:
Monitoreardesdelas: I1 j^J horas, Hártalas: ja j horas, cada: [6o j Minutos
Comienzo: Maríés '2f i l i l
Monitoreandaa:
Fig. 3.17 Mensaje al usuario cuando el programa detecta que la computadora no está conectada a la
red
3.2.2 MONITOREO A DISPOSITIVOS DENTRO DE LA RED
Ahora se monitoreará a una PC dentro de la red, esta tiene dirección IP:
192.168.126.2, se hará por una sola vez.
Acaotes XLECOCMR AYUDA
SELECCIONE —ff P1NGr MONITOREO A UMA R£D LOCAL
TIEMPOSTIEMPO REAL
UNA90LAVEZ
H»ci«i<JoPIWCíIP:
3 J
Destino:
RMlinndo MONITOREO i tíoK >: [IP: 192. lúe .ia 6.2]HACER PTNG
IMPRIMIR
InicUlúar Programa
RESULTADOS DEL MOMITOREO
El tit mpodil vUj« redondo * IPU93.i68.i26.il] fu* d«; 16 ma.j las 10:29:20 HoftvacwuUdo.conKUdoiUr^d
Fig. 3.18 Monitoreo a un Host a través de su dirección IP.
167
Los resultados muestran tiempos de viaje redondo aproximadamente cero
milísegundos , esto se debe a que la dirección monitoreda está dentro de la Red
LAN, además se muestra la hora del monitoreo y el estado de la PC, es decir está
conectada a la red.
• Si se monitorea ahora a un Host remoto ingresando una dirección de Internet:
Esta puede ser: wwv^]}ti_oc|u_ec. Como resultado tenemos el tiempo de viaje
redondo que es de aproximadamente 1500 ms.
ACCIONES SELECCIONAR AYUDA
Ayuda
SELECCIONE —PINO
MONITOREQAUNAREDLOCAL
_ TIEMPOS -
TIEMPOREAL
UNASOLAVEZ
Haciendo PING a IP: jwwvf.epn.edu.ee
'I
Comienzo: Fridav . 17 Mav
Monitoreando a: Destino:
Realizando MONITOREO a Host >: [IP: 192.100.57.244]HACERPING
IMPRIMIR
Inicializar Programa
RESULTADOS DEL MONITOREO
[El tiempo del viaje redondo a epn.edu.ec, con IP [192.106.57.244] fue de: 1547 ms a las 12:21:09.. Host activo conectado a la red
Fig. 3.19 Monitoreo a un Host a través de su dirección de Internet.
• Se monitoreará ahora a un Host remoto que no está dentro de la red LAN sino
que nos conectamos a él a través de una red WAN
El nombre del servidor remoto será: CTA01 (su ubicación física es en Argentina).
El resultado del monitoreo es el siguiente.
168
=¡SMUrHlíUH_ItMl>
ACCIONES SELECCIONAR AYUDA
Ayuda
-SELECCIONE-PING
MONITOREO A UNA RED LOCAL
- TIEMPOS-
f~ TIEMPO REAL
fí UNA SOLA VEZ
Haciendo PING a IP:
H.3c«rPirJG durante: Mitllltos- Cada...
Comienao: r
Monitoreando a: Destino:
Realizando MONITOREO a Host >: [IP: 54.113.10.2]HACER PING
IMPRIMIR
Inicíalizar Programa
RESULTADOS DEL MONITOREO
El tiempo del viaje redondo a ct a oí, con IP [54.113.10.2] fue de: 781 ms a las 13:23:19.. Host activo conectado a la red
Fig. 3.20 Monitoreo a un Host a través de su nombre de red.
El tiempo de viaje redondo a este Host remoto es de aproximadamente 800
milisegundos.
• Ahora vamos a monitorear a un conjunto de PCs que se encuentran en la red,
por una sola vez:
La dirección IP inicial será: 192.168.126.170
La dirección Ip final será: 192.168.126.180
El resultado es el siguiente:
169
ACCIONES SELECOONAA AYUDA
Ayuda-SELECCIONE-
rpmcMONTrOREOAUNAREDLOCAL
TIEMPOS -C TIEMPOREAL
ff UNA SOLA VES
Monitor» d«d«IP: 192-108.126.170 Hasta IP: 192-168-126.180
Monitoroardosdebs: J 1 _~l Minutos
Comienzo:
Moni toreando a: Destino:
Realizando MONITOREO a HostRealizando MONITOREO a Host
Realizando MONITOREO a HostRealizando MONITOREO a HostRealizando MONITOREO a Host
[IP: 127.0.0.1][IP: 192.168.126.172]
[IP: 192.168.126.174][IP: 192.168.126.175][IP: 127.0.0.1] ¿\R
IMPRIMIR
InícUlizar ProgramaRESULTADOS DEL MONITOREO
El tiempo del viaja redondo a IP [192.168.126.170] fue de: o ms..a las 12:29:06 Host encendido, conectado de la red.....El tí«mpo del viaje redondo a IP [127.0,0.1] fue de: iSS ms. J las 12:29:11 Host encendido, conectado de la redEl tiempo dal viaje redondo a IP [193.108.126.172] fue de: o ms..a laá 12:29:11} Host encendido, conectado de la redEl tiempo del viaje radondo a IP [197.0.0.1] fuá de: 156 ms.-a las 12:29:18 Hoií encendido, conectado d« la redEl tiempo del viaje redondo a IP [192.168.120.174] fue de: 16 ms..a las 12:29:21 Host encendido, conectado de la redEl tiempo del viaje redondo a IP [192.108.126.175] fue de: o ms..a las 12:29:24 Host encendido, conectado de 1a red.....El tiempo del viaje redondo a IP [127.0.0.1) fue de: 218 ms~a las 12:29:27 Host encendido, conectado da la red
Fig. 3.21 Monitoreando a un grupo de direcciones dentro de una red LAN.
Se despliega la información del monitoreo de las diferentes PCs. Se despliega el
tiempo de viaje redondo y el estado de conexión a la red de los dispositivos
conectados.
Para esta opción de monitoreo se debe correr un programa paralelo monitoreando
al localhost de modo que cuando ef programa principal esté monitoreando a la red
y no encuentre un dispositivo, el socket se quedará en espera (abierto) sino que
continuará con el monitoreo, es decir cuando no se encuentre un host disponible
la respuesta lo dará la dirección del localhost 127.0.0.1.
170
CAPITULO 4
CONCLUISONES Y RECOMENDACIONES
4.1 CONCLUSIONES
Una vez que se ha terminado este proyecto y se ha probado su funcionalidad se
puede concluir lo siguiente:
• La interfaz de aplicación de WINDOWS SOCKETS permite manejar una gran
cantidad de funciones de conectividad. Al programar con la interfaz de
Windows Sockets y las clases Winsock de la Microsoft Foundation Class
(MFC) podremos llevar a cabo comunicaciones de red entre varios dispositivos
configurados bajo el protocolo de comunicaciones TCP / IP.
• El lenguaje de programación de alto nivel Microsoft Visual C++ 6.0, aunque
tiene su grado de complejidad, es muy versátil y permite a un usuario
programar en forma ordenada y modular, es decir se pueden compilar las
clases por separado . Lo más relevante de este lenguaje de programación son
las funciones y clases que incluye para conectividad de redes. Para este
programa se usó la clase Winsock
• El programa se lo realizó con una interfaz de visualización sencilla, de modo
que permita al usuario manejar la aplicación sin problemas y que cumpla su
objetivo principal como es monitorear a un dispositvo local o remoto que esté
conectado a una red y esté configurado bajo el protocolo de comunicacines
TCP/IP.
• Se cumplió el objetivo planteado para este Proyecto de Titulación como es el
de monitorear a un dispositivo configurado con TCP / IP. Al monitorear a cierta
dirección de red el usuario recibe información valiosa como el tiempo de viaje
171
redondo desde el Host local hasta el dispositivo a monitorear, además podrá
saber la hora en la que el dispositivo fue monitoreado.
• El programa es útil para un administrador de red ya que la plataforma sobre la
que se ejecuta el programa es Microsoft Windows y es la más común en el
entorno de las comunicaciones de red en empresas medianas e instituciones
gubernamentales y privadas. Uno de los objetivo de un administrador de red
es monitorear a los dispositivos que componen su red para siempre tener un
estatus de la misma y mantener una calidad de servicio aceptable, el
administrador al usar el programa podrá controlar si es que hay tráfico en la
red reflejándose este parámetro en los tiempos de respuesta (tiempo de viaje
redondo) que es uno de los parámetros de información que presentan los
resultados de este programa.
• En la actuliadad la mayoría de aplicaciones para conectividad y redes están
desarrolladas con teoría de sockets, tanto para el sistema operativo Windows
como para sistemas operativos basados en plataformas UNIX. Los sistemas
operativos de Microsoft actuales incluyen muchas funcionalidades para
sockets y para interconectividad de redes incluidas el monitoreo, este
programa puede acoplarse sin ningún problema a estos sistemas operativos
ya que su creación se basa en la misma tecnología y particularidades de
diseño.
• El programa funciona correctamente en sistemas operativos Windows
multitarea como Windows NT 4.0, Windows 2000 y Windows XP. No corre
sobre Windows 95, Windows 98 y Windows Milenium porque las librerías y
dlls de Visual Estudio 6.0 presentan conflictos con estos Sistemas Operativos.
• Por último puedo concluir que realizar este programa fue de mucha ayuda
para mi desarrollo profesional ya que en la actualidad me encuentro
realizando tareas de administración de redes e internetworking, por lo que he
podido sacarle el máximo provecho y pienso que se podrían ímplementar en el
172
programa otras aplicaciones pero que por hoy están fuera del objetivo
particular de este proyecto de Titulación.
4.2 RECOMENDACIONES
• Al término de implementar este Proyecto de Titulación, recomiendo que un
Ingeniero en Electrónica y Telecomunicaciones también conozca de
programación orientada a objetos ya que es una herramientas muy útil para
diseñar aplicaciones sobre todo que se refieran a conectividad de redes.
Windows Sockets y la Microsoft Foundation Class, permite que un
programador de Red pueda manejar y controlar dispositivos de red en forma
local o remota ya no de la manera tradicional sino con un interfaz gráfico y en
diferentes plataformas de sistema operativo.
• Recomiendo al usuario de este programa que para una mejor visualización de
los datos, utilice un monitor SVGA que esté configurado con un área de
pantalla de 1024 x 768 pixels.
• Antes de que un usuario use este programa tendrá que percatarse de que su
PC esté conectado a una red, caso contrario tendrá varios mensajes de error.
• Si existe dificultades en el manejo del programa podrá el usuario ingresar a la
ayuda que ofrece el programa y consultar el tema sobre el que necesita
información, en particular acerca de manejo de sockets o manejo de paquetes
IP en redes.
• Cuando se ingrese una dirección IP que no pueda monitorear (por no estar el
dispositivo conectado a la red) hará que el programa se quede inactivo, lo que
se hará es abrir otra ventana del programa y monitorear a una dirección
173
conocida o al Local Host de modo que el primer programa arroje un resultado
y continúe monitoreando. La ventaja del programa es que fue diseñado para
procesos multitarea.
• Sí un usuario desea diseñar alguna aplicación para interconectividad de redes
podrá basarse en la información que presenta el capítulo 1, al igual que en el
capítulo 3 dónde se explica detalladamente la forma de implemenatar una
conexión con sockets.
REFERENCIAS BIBLIOGRÁFICAS
• APRENDIENDO VISUAL C++ 6 en 21 días, Davis Chapman, Editorial
Prentice Hall - México 1999
• APRENDIENDO TCP/IP en 24 horas , Joe Casad y Bob Willsey,
Editorial Prentice Hall - México 2000
• EFFECTIVE TCP/IP PROGRAMMING, Jon C Snader, Editorial .Addison-
Wesley - 2000
• WINDOWS SOCKETS NETWORK PROGRAMMING , by Bob Quinn,
Dave Shute, David K. Shute, Adison Wesley 1995
• INTERNETWORKING WITH TCP/IP VOL. III CLIENT-SERVER
PROGRAMMING AND APPLICAT1ONS-WINDOWS SOCKETS
VERSIÓN, Douglas E. Comer, David L. Stevens, Editorial Prentice Hall -
edición volumen 3 - abril 1997
• PROGRAMACIÓN EN INTERNET , Hamsa Cris , Cope Ken, McGraw
Hill 1ra. Edición - México 1996
• REDES GLOBALES DE INFORMACIÓN CON INTERNET Y TCP/IP,
Douglas E. Comer, Prentlce Hall 3ra. Edición 1996
• REDES DE COMPUTADORAS, Andrew S. Tanenbaum, Prentice Hall
3ra. Edición 1997
CONSULTAS EN INTERNET:
http://cws.internet.com/32winsock.html
http://www.sockets.com/
http://msdn.microsoft.com/visualc/default.asp
http://www.codequru.com/index.shtml
http://www.vale.edu/pclt/COMM/TCPIP.HTM
http://www.protocols.com/pbook/tcpip.htm
http://www.abcdatos.com/tutoriales/redes.html
http://www.aul.fiu.edu/tech/visualc.html
http://www.visionx.com/mfcpro/
http://world.std. comHimf/papers/sockets/wínsock.htmi
http://www.microsoft.com/products/developer/winsock/defauit.htm
ftp://ftp.cica.indiana.edu/pub/pc/win3/winsock/
http://msdn.microsoft.com/
http://www.sockets.com/wsnp.htm
http://infase.es/FORMACION/INTERNET/tcpip.html
ANEXO A
ÍNDICE DE FIGURAS Y TABLAS
ÍNDICE DE FIGURAS
Fig. 1.1 Red tipo Estrella 4Fig. 1.2 Red Tipo Bus 4Fig. 1.3 Red Tipo Anillo 5Fig. 1.4 Organización conceptual del software de protocolo en capas 8Fig. 1.5 Una comparación de (a) estratificación por capas conceptual
de protocolos y, (b) una visión realista de la organización delsoftware que muestra varias interfaces de red entre IP yvarios protocolos 9
Fig. 1.6 Trayectoria de un mensaje que atraviesa Internet desde unemisor, a través de dos máquinas intermedias, hasta unreceptor. Las máquinas intermedias sólo envían el datagramahacia la capa de software IP 10
Fig. 1,7 Modelo de referencia OSI, para software de protocolo 11Fig. 1.8 Las cuatro capas conceptuales del software TCP/IP y la forma
en que los objetos pasan entre capas. La capa con elnombre interfaz de red se conoce con frecuencia con elnombre de capa de enlace de datos 13
Fig. 1.9 La capa de red de TCP/IP incluye los módulos de software deIP, ICMPeIGMP 14
Fig. 1.10 Trayectoria de un mensaje cuando pasa de la aplicación enun anfitrión a la aplicación en otro. Una capa n en el anfitriónB recibe exactamente el mismo objeto que la capa ncorrespondiente del anfitrión emisor A 16
Fig. 1.11 Relación entre la estratificación por capas conceptual y lasfronteras, para el sistema operativo y las direcciones deprotocolo de alto nivel 18
Fig. 1.12 Encápsulamiento de datos utilizando TCP en una redEthernet 19
Fig. 1.13 Estructura de un datagrama IP que muestra los campos en elencabezado IP 22
Fig. 1.14 Formato del Datagrama IP 27Fig. 1.15 Formato de la Cabecera del IPv6 31Fig. 1.16 Dos niveles de la encapsulacion ICMP. El mensaje ICMP se
encapsula en un datagrama IP que, a su vez, se encapsulaen una trama para su transmisión. Para identificar el ICMP, elcampo de protocolo del datagrama contiene el valor 1 35
Fig. 1.17 a) Mensaje del ICMP con los campos del encabezado deICMP identificados
b) Encapsulamiento del ICMP 36Fig. 1.18 Formato de mensajes de ICMP de solicitud y respuesta de
eco (tipos 8 y 0) 39Fig. 1.19 Proceso básico de conexión de un socket 40
Fig. 1.20 Los puertos sirven para enrutar las conexiones de red a laaplicación correcta 43
Fig. 1.21 Estructura simple de datos de un socket 45Fig. 1.22 Posición de Winsock dentro del ambiente Windows 63
Fig. 2.1 Diagrama Básico del Contenido de la Ventana Principal 88Fig. 2.2 Presentación Básica de Interfaz Programa - Usuario 93Fig. 2.3 Opción MFC AppWizard(exe) en Visual C++ 94Fig. 2.4 Configurando un Proyecto con MFC AppWizard(exe) en
Visual C++. Paso 1 94Fig. 2.5 Configurando un Proyecto con MFC AppWizard(exe) en
Visual C++. Paso 2 95Fig. 2.6 Configurando un Proyecto con MFC AppWizard(exe) en
Visual C++. Paso 3 95Fig. 2.7 Configurando un Proyecto con MFC AppWizard(exe) en
Visual C++. Paso 4 96Fig. 2.8 Configurando un Proyecto con MFC AppWizard(exe) en
Visual C++. Resumen 96Fig. 2.9 Presentación de la ventana principal del Proyecto 124Fig. 2.10 Presentación de la ventana principal del Proyecto incluido un
menú 133Fig. 2.11 Presentación de la ventana de diálogo de la Opción Salir 140Fig. 2.12 Presentación de la ventana de diálogo de la Opción Inicializar
Programa 141
Fig. 3.1 Mensaje al monitorear un Host por su dirección IP cuando laPC local está desconectada de la red 153
Fig. 3.2 Mensaje al monitorear un Host por su nombre cuando la PClocal está desconectada de la red 154
Fig. 3.3 Mensaje al monitorear una dirección de Internet cuando la PClocal está desconectada de la red 154
Fig. 3.4 Mensaje al ingresar una cadena de caracteres cualquieracuando la PC local está desconectada de la red 155
Fig. 3.5 Mensaje al ingresar una secuencia de números cualquieracuando la PC local está desconectada de la red 155
Fig. 3.6 Resultados luego de realizar un monitoreo al LOCALHOST 156Fig. 3.7 Resultados luego de realizar un PING a una dirección IP 157Fig. 3.8 Resultados luego de realizar un PING a una dirección IP 158Fig. 3.9 Resultados luego de realizar un PING a un Host a través de
su nombre de red 159Fig. 3.10 Resultados luego de realizar un PING a una dirección de
Internet 160Fig. 3.11 Resultados luego de realizar un PING a un Host remoto, parte
delaredWAN 161Fig. 3.12 Resultados cuando la dirección ingresada a monitorear es
una cadena de caracteres que no corresponden a una
dirección IP 162Fig. 3.13 Resultados obtenidos al monitorear a varios dispositivos de
red dentro de una Red de Área Local 163Fig. 3.14 Mensaje que indica al usuario que la dirección que ingresó no
corresponde a una dirección de red 164Fig. 3.15 Mensaje que indica al usuario que debe ingresr un número
entero entre 1 y 24 165Fig. 3.16 El usuario debe tener en cuenta de no ingresar una cadena
de caracteres 165Fig. 3.17 Mensaje al usuario cuando el programa detecta que la
computadora no está conectada a la red 166Fig. 3.18 Monitoreo a un Host a través de su dirección IP 166Fig. 3.19 Monitoreo a un Host a través de su dirección de Internet 167Fig. 3.20 Monitoreo a un Host a través de su nombre de red 168Fig. 3.21 Monitoreando a un grupo de direcciones dentro de una red
LAN 169
ÍNDICE DE TABLAS
Tabla 1.1 Características de la Opción IPTabla 1.2 Valores del tipo de mensajes ICMPTabla 1.3 Funciones para Transmitir Datos a través de un socketTabla 1.4 Funciones para la recepción de DatosTabla 1.5 Funciones Sockets de BloqueoTabla 1.6 Funciones Sockets de No BloqueoTabla 1.7 Funciones de Bases de DatosTabla 1.8 Funciones de Bases de Datos AsincronasTabla 1.9 Macros para manipular el estado de un socketsTabla 1.10 Valores del Parámetro lEvent de WSAAsyncSelect
26374851535455565859
ANEXO B
PRESENTACIONES
MO
NIT
OR
EA
ND
O A
L L
OC
AL
HO
ST
AC
CIO
NE
S
SEL
EC
CIO
NA
R
AY
UD
A -SE
LE
CC
ION
E-
ff P
ING
C M
ON
ITO
RE
OA
UN
AR
ED
LO
CA
L
-TIE
MPO
Sr
TIEM
PO R
EAL
ff U
NA
SOL
AV
EZ
Hac
iend
o PI
NG
a J
P:
[loc
alho
st
Hac
er P
ING
dur
ante
: H
^j
Min
utos
.C
ada.
.. Ji
Com
ienz
o:
Wed
nesd
ay, 1
5
Mon
itore
aodo
a:
Des
tino:
Rea
lizan
do M
ON
TTO
REO
a H
ost
Rea
lizan
do M
ON
TTO
REO
a H
ost
>:
>:
[IP:
127.
0.0.
1][IP
: 12
7-0.
0.1]
RES
ULT
AD
OS
DEL
MO
NIT
OR
EO
M)
Ayu
da
_ Se
gund
os IMPR
IMIR
Inic
ializ
ar P
rogr
ama
I
El ti
empo
del
via
je re
dond
o a
ws_
8425
3, c
on IP
[127
.0.0
.1]
fue
de:
o m
s a la
s 13
:51:11
.. R
ESPU
ESTA
DEL
LO
CALH
OST
El ti
empo
del
via
je r
edon
do a
ws_
8<i2
53, c
on I
P [
127.
0.0.
1] fu
e de
: o
ms
a la
s 13
:51:
14..
RES
PUES
TA D
EL L
OCA
LHO
ST
MO
NIT
OR
EA
ND
O A
UN
HO
ST A
TR
AV
ÉS
DE
SU
DIR
EC
CIÓ
N IP
ACCI
ONE
S SE
LECC
IONA
R AV
UDA
™
- SE
LE
CC
ION
E -
í? P
ING
C
MO
NT
TO
RE
OA
UN
AR
ED
LO
CA
L
-TIE
MP
OS
-
TIE
MP
O R
EA
L
UN
A S
OL
A V
EZ
Hac
iend
o PI
NG
a IP
: 19
2.16
8.12
6.1
Hac
er P
INO
dur
ante
: [
ij
j M
inut
os.
Cad
a...
i
Com
ienz
o:
[Ñed
nesd
ay,
15
May
,2
00
2 -d
[>
J
[13:
39:4
;
Mon
itore
ando
a:
Des
tino:
Rea
lizan
do M
ON
ITO
REO
a H
ost
>:[I
P: 1
92.1
68.1
26.1
]
RE
SU
LTA
DO
S D
EL
MO
NIT
OR
EO
ü)
A
yuda
jj
Segu
ndos
HA
CER
PIN
G
IMPR
IMIR
Inic
ializ
ar P
rogr
ama
El ti
empo
del
via
je re
dond
o a
IP [1
92.1
68.1
26.1
] fue
de:
o m
s..a
las
14:0
4:03
Hos
t enc
endi
do, c
onec
tado
a la
red
MO
NIT
OR
EA
ND
O A
UN
HO
ST A
TR
AV
ÉS
DE
SU
NO
MB
RE
DE
RE
D
53 M
ONIT
OR JC
MP
ACC
ION
ES
SELE
CCIO
NAR
AVUD
A -SE
LE
CC
ION
E-
PIN
G
MO
NIT
OR
EO
A U
N A
RE
D L
OC
AL
-TIE
MPO
S-
TIEM
PO R
EAL
UN
A S
OLA
VES
Hac
iend
o PI
NG
a IP
: Q
uito
oi
Hac
er P
ING
dur
ante
:^
M
inut
os.
Cad
a...
j Se
gund
os
Com
ienz
o:
f
Mon
itore
ando
a:
. [W
edne
sday
, 15
May
,2
00
215
=37
^0
Des
tino:
RE
SU
LTA
DO
S D
EL
MO
NIT
OR
EO
Rea
lizan
do M
ON
ITO
REO
a H
ost
>:
Rea
lizan
do M
ON
ITO
REO
a H
ost
>:
[IP:
192
.168
.126
.2]
[IP:
192
.168
.126
.2]
[IP:
192
.168
.126
.2]
[IP:
192
.168
.126
.2]
[IP:
192
.168
.126
.2]
[IP:
192
.168
.126
.2]
[IP:
192
.168
.126
.2]
d
HA
CER
PIN
G
IMPR
IMIR
Inic
ializ
ar P
rogr
ama
El t
iem
po d
el v
iaje
red
ondo
a Q
uito
oi.p
ecom
.com
.ar,
El ti
empo
del
via
je r
edon
do a
Qui
tooi
.pec
om.o
om.a
r,El
tiem
po d
el v
iaje
red
ondo
a Q
uito
oi.p
ecom
.com
.ar,
El ti
empo
del
via
je r
edon
do a
Qui
tooi
.pec
om.c
om.a
r,El
tiem
po d
el v
iaje
red
ondo
a Q
uito
oi.p
ecom
.com
.ar,
El ti
empo
del
via
je r
edon
do a Q
uito
oi.p
ecom
.com
.ar,
El ti
empo
del
via
je r
edon
do a
Qui
tooi
.pec
om.c
om.a
r,
con
IP [1
92.1
08.1
26.2
] fiíe
de:
con
IP [
192.
168.
126.
2] f
ue d
e:co
n IP
[19
2.16
8.12
6.2]
fue
de:
con
IP [1
92.1
68.1
26.2
] fu
e de
:co
n IP
[192
.168
.126
.2]
fue
de:
con
IP [19
2.16
8.12
6.2]
fue
de:
con
IP [1
92.1
68.1
26.2
] fu
e de
:
o m
s a
las
15:3
7:19
.,o
ms a
las
15:3
7:24
.o
ms a
las 15
:37:
29.
o m
s a la
s 15
:37:
34.,
o m
s a la
s 15
:37:
39.
o m
sala
s 15
:37:
44.
o m
s a la
s 15
:37:
49.,
Hos
t act
ivo c
onec
tado
a la
red
Hos
t act
ivo c
onec
tado
a la
red
Hos
t act
ivo c
onec
tado
a la
red
Hos
t act
ivo co
nect
ado
a la
red
Hos
t act
ivo c
onec
tado
a la
red
Hos
t act
ivo c
onec
tado
a la
red
Hos
t act
ivo co
nect
ado
a la
red
L
MO
NIT
OR
EA
ND
O A
UN
HO
ST A
TR
AV
ÉS
DE
SU
DIR
EC
CIÓ
N D
EIN
TE
RN
ET
MO
NIT
OR
JC
MP
AC
CIO
NE
S
SE
LEC
CIO
NA
R
AV
UD
A
Ayu
da
-SE
LE
CC
ION
E-
i* P
ING
C M
ON
ITO
RE
OA
UN
AR
ED
LO
CA
L
-TIE
MPO
S-
TIE
MPO
RE
AL
UN
A S
OLA
VE
Z
Hac
iend
o PI
NG
a I
P:
Hac
er P
ING
dur
ante
:»
Min
utos
.C
ada.
.. fio
^\s
Com
ienz
o:
Mon
i tor
eand
o a
:
15:3
7:20
Des
tino:
Rea
lizan
do M
ON
ITO
REO
a H
ost
>:
Rea
lizan
do M
ON
ITO
REO
a H
ost
>:
Rea
lizan
do M
ON
ITO
REO
a H
ost
>:
[IP:
192.
188.
57.2
44]
[IP: 1
92.1
88.5
7.24
4][I
P: 19
2.18
8.57
.244
][I
P: 19
2.18
8.57
.244
][I
P:
192.
188.
57.2
44]
[IP:
192,
188.
57.2
44]
HA
CER
PIN
G
IMPR
IMIR
Inic
ializ
ar P
rogr
ama
RE
SU
LTA
DO
S D
EL
MO
NIT
OR
EO
El ti
empo
del
via
je r
edon
do a
epn
.edu
.ec,
con
IP [
192.
166.
57.2
44]
fue
de:
El ti
empo
del
via
je r
edon
do a
epn
.edu
.ec,
con
IP [19
2.18
6.57
.244
] fu
e de
:El
tiem
po d
el v
iaje
red
ondo
a e
pn.e
du.e
c, c
on IP
[19
2.18
8.57
.244
] fu
e de
:El
tiem
po d
el v
iaje
red
ondo
a e
pn.e
du.e
c, c
on IP
[19
2.18
8.57
.244
] fu
e de
:El
tiem
po d
el v
iaje
red
ondo
a e
pn.e
du.e
c, c
on IP
[19
2.18
8.57
.244
] fu
e de
:El
tiem
po d
el v
iaje
red
ondo
a e
pn.e
du.e
c, c
on IP
[19
2.18
8.57
.244
] fu
e de
:1547
ms
a la
s 15
:45:
18..
2187
msa
las
15:4
5:30
..17
03 m
s a
las
15:4
5:42
..16
10 m
sala
s 15
:45:
53..
1828
ms
a la
s 15
:46:
05..
1578
msa
las
15:4
6:17
..
Hos
t act
ivo
cone
ctad
o a
la re
dH
ost a
ctiv
o co
nect
ado
a la
red
Hos
t act
ivo
cone
ctad
o a
la r
edH
ost a
ctiv
o co
nect
ado
a la
red
Hos
t act
ivo
con
ecta
do a
la re
dH
ost ac
tivo
cone
ctad
o a
la re
d
MO
NIT
OR
EA
ND
O A
UN
HO
ST P
OR
UN
IN
TE
RV
AL
O D
E T
IEM
PO
as M
ONITO
R JC
MP
AC
CIO
NE
S
SE
LEC
CIO
NA
R
AY
UD
A-,.
iasi
Ayu
da
- SE
LE
CC
ION
E-
PIN
G
MO
NIT
OR
EO
AU
NA
RE
DL
CIC
AL
HE
MP
OS-
TIE
MPO
RE
AL
UN
ASO
LA
VE
Z
Hac
iend
o PI
NG
a IP
: 19
2.16
8.12
6.2
Hac
er P
ING
dur
ante
:»
M
inut
os.
Cad
a...
[3.11
Seg
undo
s
Com
ienz
o:IW
edne
sday
, 15
May
,2
002
-il
Mon
itore
ando
a:D
estin
o:
RE
SU
LTA
DO
S D
EL
MO
NIT
OR
EO
Rea
lizan
do M
ON
ITO
REO
a H
ost
— >
:
[IP:
192.
168.
126.
2][I
P: 1
92.1
68.1
26.2
][I
P: 1
92.1
68.1
26.2
][I
P: 1
92.1
68.1
26.2
][I
P: 1
92.1
68.1
26.2
][I
P: 1
92.1
68.1
26.2
][I
P: 1
92.1
68.1
26.2
]
J d
IMPR
IMIR
Iníc
ializ
ar P
rogr
ama
0 ti
empo
del
viaj
e re
dond
oa IP
[192
.168
.126
.2]
fue d
e:El
tiem
po de
l via
je re
dond
o a
IP [1
92.1
68.1
26.2
] fue
de:
El ti
empo
del
via
je r
edon
do a
IP [1
92.1
68.1
26.2
] fue
de:
El ti
empo
del
via
je r
edon
do a
IP [1
92.1
68.1
26.2
] fue
de:
El ti
empo
del
via
je r
edon
do a
IP [1
92.1
68.1
26.2
] fue
de:
El ti
empo
del
via
je r
edon
doa
IP [1
92.1
68.1
26.2
] fu
e de
:El
tiem
po d
el v
iaje
red
ondo
a IP
[192
.168
.126
.2]
fue
de:16
ms.
.a la
s 14
:08:
37o
ms.
.a la
s 14:
08:4
0o
ms..
a la
s 14
:08:
43o
ms.
.a la
s 14
:08:
46o
ms.
.a la
s 14
:08:
49o
ms..
a la
s 14
:08:
52o
ms.
.a la
s 14
:08:
55
Hos
t enc
endi
do, c
onec
tado
a k
red
Hos
t enc
endi
do, c
onec
tado
a la
red
Hos
t enc
endi
do, c
onec
tado
a la
red
Hos
t enc
endi
do, c
onec
tado
a la
red
Hos
t enc
endi
do, c
onec
tado
a la
red
Hos
t enc
endi
do, c
onec
tado
a la
red
Hos
t enc
endi
do, c
onec
tado
a la
red
ME
NSA
JE D
E E
RR
OR
CU
AN
DO
SE
IN
GR
ESA
UN
A D
IRE
CC
IÓN
QU
E N
O E
XIS
TE
AC
CIO
NE
S
SE
LEC
CIO
NA
R
AY
UD
A
Ayu
da
-SE
LE
CC
ION
E-
PIN
G
MO
NIT
OR
EO
AU
NA
RE
DL
OC
AL
-TIE
MP
OS
-
f T
TE
MP
OR
EA
L
ff
UN
A S
OL
A V
ES
Hac
iendo
PIN
G a
IP
: w
erhrs
etjs
rj
Cad
a..:
S
egu
nd
os
Com
ienzo
: p^day, 1
5
May
Monit
ore
ando a
:
^ r
wet
hrse
tjsrj No p
uedo
reso
lver
est
e n
ombr
e e
n la
red.
Rev
ise la
dire
cció
n in
gre
sada!!!
OK
RE
SU
LTA
DO
S D
EL
MO
NIT
OR
EO
HA
CE
R P
ING
IMP
RIM
IR
Inic
ializa
r P
rogra
ma
MO
NIT
OR
EA
ND
O A
VA
RIO
S D
ISP
OSI
TIV
OS
DE
NT
RO
DE
UN
A R
ED
AC
CIO
NE
S
5El£
CC
ION
Aft
A
VU
DA
Ayuda
-SE
LE
CC
ION
E -
r PI
NGff
M
ON
TT
OR
EO
AU
NA
RE
DL
OC
AL
-TIE
MPO
S-
r
TIE
MP
OR
EA
L
ff
UN
AS
OL
AV
EZ
Moa
itore
o de
sde
IP:
192.
168.
126.
156
Has
talP
: [1
92.1
68.1
26.1
65
Mon
itor
íar
~T] h
oras
, H
asta
las:
(2
jj
ho
ras,
C
ada:
j:
_T!
Min
utos
Com
ienz
o:
Mon
itore
ando
a:
y, 1
5 M
ay
Des
tino:
' "
[IP:
192
.166
.126
.156
][I
P: 1
92.1
68.1
26.1
57]
[IP:
192
.166
.126
.158
][I
P: 1
92.1
68.1
26.1
59]
[IP:
192
.168
.126
.160
][I
P: 1
92.1
68.1
26.1
61]
[IP:
192
.168
.126
.162
]
^J
J zlR
ES
ULT
AD
OS
DE
L M
ON
ITO
RE
O
MO
NIT
OR
EAR
IMPR
IMIR
Inic
íaliz
ar P
rogr
ama
El ti
empo
del
via
je re
dond
o a
IP [1
92.1
66.1
26.1
56]
fue
de: 1
6 m
s..a
las
16:1
5:54
El ti
empo
del
via
je r
edon
do a
IP [1
92.1
68.1
26.1
57] f
ue d
e: o
ms.
.a la
s 16
:15:
57El
tiem
po d
el v
iaje
red
ondo
a IP
[192
.168
.126
.158
] fue
de:
o m
s..a
las
16:1
6:00
El ti
empo
del
via
je r
edon
do a
IP [1
92.1
68.1
26.1
59] f
ue d
e: o
ms.
.a la
s 16
:16:
03El
tiem
po d
el v
iaje
redo
ndo
a IP
[192
.168
.126
.160
] fue
de:
o m
s..a
las
16:1
6:06
El ti
empo
del
via
je re
dond
o a
IP [1
92.1
68.1
26.1
61]
fue
de: o
ms.
.a la
s 16
:1.6
:09
El ti
empo
del
via
je r
edon
do a
IP [19
2.16
8.12
0.16
2] fu
e de
: o m
s..a
las
16:1
6:12
Hos
t enc
endi
do, c
onec
tado
de
la re
d»H
ost e
ncen
dido
, con
ecta
do d
e la
red.
..H
ost e
ncen
dido
, con
ecta
do d
e la
red...
Hos
t enc
endi
do, c
onec
tado
de
la re
d...
Hos
t enc
endi
do, c
onec
tado
de
la re
d...
Hos
t enc
endi
do, c
onec
tado
de
la re
d..,.
Hos
t enc
endi
do, c
onec
tado
de
la re
d....
J
CU
AD
RO
DE
DIA
LO
GO
CU
AN
DO
SE
DE
SEA
IN
ICIA
LIZ
AR
LA
PA
NT
AL
LA
AC
CIO
NE
S
SE
LEC
CIO
NA
R
AY
UD
A
Ayu
da-S
EL
EC
CIO
NE
(=• P
ING
r
MO
NIT
OR
EO
AU
NA
RE
DL
OC
AL
- TIE
MPO
S -
r T
IEM
PO R
EA
L
ff U
NA
SOL
AV
EZ
Hac
iend
o PI
NG
a IP
: [l
ocal
host
Hac
er P
ING
du
ran
te:
fiC
ada.
.. |i
-"-
j S
egun
dos
Com
ienz
o:
3u
nd
a?
' 1
9
May
,2
00
2
Mon
ítor
ean
do
a:P
resi
one
Si o
No
\s |
No
|
HA
CE
R P
ING
- Inl
x|
IMPR
IMIR
Iníc
ializ
ar P
rogr
ama
RE
SU
LTA
DO
S D
EL
MO
NIT
OR
EO
El ti
empo
del
via
je re
dond
o a
ws^
8425
3, co
n IP
[127
.0.0
,1]
fue
de: o
ms a
las 21
:09:
18..
RESP
UES
TA D
EL L
OCA
LHO
ST
CU
AD
RO
DE
DIA
LO
GO
CU
AN
DO
SE
DE
SEA
TE
RM
INA
R E
LP
RO
GR
AM
A
AC
CIO
NE
S
SE
LEC
CIO
NA
R
AY
UD
A
Ayu
da
-SE
LE
CC
ION
E-
PIN
G
MO
NIT
OR
EO
AU
NA
RE
DL
CC
AL
-TIE
MPO
S-T
IEM
PO R
EA
L
UN
AS
OL
AV
E2
Hac
iend
o PI
NG
a IP
: jl
ocal
host
Hac
er P
IWG
du
ran
te:
UM
inu
tos-
Cad
a... ji
Seu
nd
os
Com
ienz
o:
Mon
itor
eand
o a
:
,19
May
,2
00
2
-^U
ST
ED
CA
NC
EL
AR
A E
L P
RO
GR
AM
A! A
DIÓ
S»,
Pre
sion
e S
i o M
o
Yes
HA
CER
PIN
G
IMP
RIM
IR
Inic
íali
zar P
rogr
ama
RES
ULT
AD
OS
DE
L M
ON
ITO
RE
O
PRESENTACIÓN DE LA AYUDA DEL PROGRAMA
MO
NIT
OR
IC
MP
Ap
plicatio
n H
elp
Fríe
E
dit
Boo
kmar
k O
pCío
ns
Hslp
Con
tení
*[
índe
x j
Bac
k |
frin
l
MO
NIT
OR
EO
D
E D
ISP
OS
ITIV
OS
CO
NF
IGU
RA
DO
S C
ON
TC
P/1
P
INT
RO
DU
CC
IÓN
La e
xpansi
ón
de
las
redes
info
rmátic
as y
de te
leco
munic
aci
ones
de á
rea lo
cal,
imple
menta
das
en t
od
o e
l m
undo
que
usa
n e
l pro
toco
lo d
e r
ed
TC
P/IP
par
a la
transm
isió
n d
e in
form
ació
n,
cre
cen
ca
da
día
más
y e
l monito
reo
de
las
mis
mas
es
un r
equerim
iento
muy
ne
cesa
rio
cuyo
obj
etiv
o
prin
cipal
es g
ener
ar r
ep
ort
es
de la
dis
ponib
ilidad
y a
cce
sib
ilid
ad
de
tod
os
los
dis
posi
tivos
de c
omun
icac
ione
s p
rese
nte
s en
dic
ha r
ed
. pa
ra
lleva
r
una e
fect
iva p
lanifi
caci
ón,
org
an
iza
ció
n,
supe
rvis
ión
y
con
tro
l de
mo
do
que
se g
ara
ntic
e
un n
ivel
de s
erv
icio
efic
ient
e p
or p
arte
de lo
s
ad
min
istr
ad
ore
s de
la re
d.
En l
os c
aso
s m
ás n
orm
ales
un
sis
tem
a d
e r
ed
es
¡nte
rco
ne
cta
da
s (in
tern
éis
) no
tom
an
to
po
log
ías
esp
ecí
fica
s si
no
que
co
ne
cta
n l
as r
ed
es
sin
impo
rtar
sus
top
olo
gía
s o
tecn
olo
gía
s, e
sta
s in
tern
éis
util
izan
dis
posi
tivos
esp
eci
ale
s, lla
mad
os h
ost
, re
pe
tido
res,
puente
s, e
nru
lad
ore
s ,
com
pu
ert
as,
etc
, pa
ra c
on
ect
ar
las
red
es
ind
ep
en
dia
nte
s, e
n el
ca
so d
e la
s re
de
s de
áre
a lo
cal u
tiliz
an
ta
les
disp
ositi
vos
para
ext
en
de
r la
con
exi
ón
de
ntr
o d
e su
¿re
a.
El
pres
ente
tra
ba
jo s
e h
a d
esar
rolla
do c
on e
l p
rop
ósi
to d
e c
rea
r un
a h
erra
mie
nta
de s
oftw
are
que
per
mita
mon
itore
ar a
to
do
dis
posi
tivo
conf
igur
ado
baj
o el
pro
toco
lo d
e re
c
de P
rogr
ama d
e A
plic
aci
ón (A
PI, A
reca
lca
r qu
e e
n lo
s últi
mos
años
el
por
est
o la
herr
am
ienta
de
pro
gram
AP
I b
asa
da e
n e
l par
adig
ma d
e s
oc
Win
dow
s e
s un
a d
e la
s pla
tafo
rmas
est
ándar
ace
pta
do
par
a e
l de
sarr
olle
La id
ea
bá
sica
de
MO
NIT
OR
EO
ta
l
rem
oto
s e
stá
n d
isponib
les
y a
cce
sil
que
dem
ora e
n ll
egar
las
re
spu
est
a:iH
pir. T
upir»
MO
NIT
OR irM
P A
ppiir
ntinr. H
fip
. -
.= .-*i
t'iITM
Mr*
PI
Ct •n
lenl
» I
F*n
d 1
CEck
a lo
ptc,
and
then
dck
Ditp
iay.
Oí c
6ck
anot
hM la
b, tu
ch a
* In
dex.
ftjl
«MO
NIT
OR
EO
DE
DIS
PO
SIT
IVO
S C
ON
FIG
UR
ADO
S C
ON
TC
P /
\F±_
g)
«IN
TR
OD
UC
CIÓ
N»
(¿21
«R
ED
ES
DE
ÁR
EA
LO
CA
L»@
] «R
ED
ES
LA
N»
Q2J
«P
RO
TO
CO
LO IP
»[3
«P
RO
TOC
OLO
IP
Ȇ
á «
EN
CA
PS
ULA
MIE
NTQ
DE
DA
TO
S»
[21 «E
NC
AP
SU
LAM
IEN
TO
»(Ü
«D
AT
AG
RA
MA
IP»
05
«ES
TR
UC
TU
RA
IP
»0
«D
IRE
CC
ION
ES IP
»
i?)
«IN
TRO
DU
CC
IÓN
A IC
MP
»g|
«EN
TR
EG
A D
E M
ENSA
JES IC
MP
»«i
~
i -r
1
Orn
a
| P
rinL.
. j
Can
cel
desa
rrol
lado
util
iza u
na I
nter
face
iara
desa
rrolla
r so
ftwar
e. C
abe
ado
es e
l de
Mic
roso
ft W
indow
s,
do c
om
o W
inso
ck q
ue e
s un
a
e M
icro
soft
Win
dow
s. C
om
o
Vin
dow
s S
ock
ets
def
ine
un
term
inar
si
cie
rto
s an
fitrio
nes
o y
de
spu
és
se m
ide
el t
iem
po
AC
ER
CA
DE
L P
RO
GR
AM
A M
ON
ITO
R
ICM
P
AC
CIO
NE
S
SE
LEC
CIO
NA
R
AY
UD
A
HB
IlIí
aiH
ES
iBE
miB
H^
^
Ayu
da
-SE
LE
CC
ION
E-
ff
PIN
G
r
MO
NT
TO
RE
OA
UN
AR
ED
LO
CA
L
-TIE
MPO
S-
TIE
MPO
RE
AL
UN
ASO
LA
VE
Z
Hac
iend
o PD
JG a
IP:
loca
lhos
t
Hao
?r P
ING
dur
ante
:M
iílu
tos-
jj S
egun
dos
Com
ienz
o:
Mon
itor
eand
oa:
Ab
ou
t M
GIN
ITÜ
R
ICM
P
MO
NIT
OR
JCM
P V
ersi
ón 1
.1
Por:
Mar
celo
Ric
ardo
Fili
an N
arvá
ez
OK
Cop
yrig
ht (O
200
2
RE
SU
LTA
DO
S D
EL
MO
NIT
OR
EO
HA
CE
R P
ING
IMPR
IMIR
Inic
ializ
ar P
rogr
ama