Programación de red sobre Linux con Perl 5 Time: Net::Time 5-1 Introducción a Net::Time y Libnet como colección contenedora 5-2 Instalación de Libnet 5-3 Protocolo Time 5-4 Descripción del modulo 5-4-1 Caso básico de utilización 5-4-2 Método 5-5 Ejemplos de utilización del modulo 5-5-1 xxx.pl 5-5-2 xxx2.pl 5-6 Referencias _________________________________________________________________________ ___________ 5 Time: Net::Time 5-1 Introducción a Net:: Time y Libnet como colección contenedora Net:: Time - Clase cliente Time El modulo que instalaremos ahora es “Net::Time”. Este módulo se encuentra presente en la colección “Libnet”. En este caso utilizaremos la versión de libnet1_0701. Si ya realizo las pruebas con los módulos Net:FTP, Net:SMPT o Net::POP3 vistos anteriormente, ya tendrá instalado Net::Time y esta listo para trabajar. Este módulo provee subrutinas para poder obtener el tiempo desde una maquina remota. Esta documentación asume que usted está familiarizado con el protocolo Time descrito en RFC868. Libnet es una colección de módulos de Perl contenedora de Net::Time (entre otros módulos). Provee una interfaz API simple y consistente para el lado del cliente de varios protocolos utilizados en la comunidad de Internet. Los RFC’s implementados en esta versión son: Net::FTP RFC959 Protocolo de transferencia de archivos Net::SMTP RFC821 Protocolo de transferencia de mail simple Net::Time RFC867 Protocolo de fecha y hora Net::Time RFC868 Protocolo de hora Net::NNTP RFC977 Protocolo de transferencia de noticias en la red Net::POP3 RFC1939 Protocolo de Oficina postal 3 Net::SNPP RFC1861 Protocolo de paginación de red de trabajo simple 5-2 Instalación de Libnet Para utilizar este paquete se necesita una versión de Perl 5.002 o superior. La distribución “DragonLinux”, (y Red Hat 6.1) contienen versiones de Perl adecuadas para esta instalación. La versión que nosotros instalamos es ”libnet1.0701.tar.gz”. El proceso necesario para la instalación ya fue descrito en las tres fichas vistas anteriormente. 5-3 Protocolo "time" El protocolo "time" es un protocolo estándar. Su status es electivo. La especificación actual de TIME se encuentra en el RFC 868 - Protocolo del servidor "Time". El protocolo "time" proporciona la fecha y la hora en un formato legible para la máquina. Usa como capa de transporte TCP o UDP. Su puerto es el 37(decimal). Si se usa vía TCP: El servidor espera en escucha pasiva en el puerto tcp 37. El cliente deberá realizar una apertura activa al puerto 37 del servidor. En este momento el servidor envía la hora como un número binario de 32 bits. Cuando el cliente recibe este número, cierra la conexión. Si se usa vía UDP: El servidor espera en escucha pasiva en el puerto tcp 37. El cliente enviara un datagrama vacío al puerto 37. Una ves que el servidor recibe este datagrama se lo devuelve con la hora en formato de número binario de 32 bits. El número de 32 bits representa el número de segundos transcurridos desde la medianoche del 1 de enero de 1900(GMT). Es conveniente para que la máquina sincronice su propio reloj, pero no resulta legible a ojos del usuario. 5-4 Descripción del módulo [1] 5-4-1 Caso básico de utilización #!/bin/perl use Net::Time qw(inet_time); $tiempo_tcp=inet_time(); #otra forma $tiempo_tcp=inet_time('dragonlinux.example.net'); #otra forma TCP $tiempo_tcp=inet_time('dragonlinux.example.net' ,'tcp'); #otra forma UDP $tiempo_udp=inet_time('dragonlinux.example.net' ,'udp'); 5-4-2 Método Inet_time([HOST[, PROTOCOLO[,TIEMPO_DE_ESPERA]]]) Obtiene el tiempo del HOST o de algún host por defecto si HOST no es dado. El argumento opcional PROTOCOLO define el protocolo a utilizar, tcp o udp. El resultado será un valor de tiempo o un valor no definido si el método falla. 5-5 Ejemplos de utilización del módulo 5-5-1 time_tcp.pl Este ejemplo solicita la hora en formato UNIX a un host servidor Time, para que luego de obtenida sea utilizada para cualquier fin dependiendo de las necesidades. En este caso se utilizara TCP. La línea de comando utilizada para ejecutar el código y lograr la captura (disparada desde otra terminal) que se anexa al final del script fue la siguiente: redhat/~# perl time_tcp.pl ################################################################## #!/bin/perl use Net::Time qw(inet_time); # carga el modulo Net::Time. $tiempo_tcp=inet_time('dragonlinux.example.net' ,'tcp'); # Utiliza la función inet_time() para retornar el tiempo. print "$tiempo_tcp\n"; # imprime el tiempo. ################################################################## Captura realizada sobre la ejecución de este script. Código Fuente de time_tcp.pl. 5-5-2 time_udp.pl Este ejemplo solicita la hora en formato UNIX a un host servidor Time, para que luego de obtenida sea utilizada para cualquier fin dependiendo de las necesidades. En este caso se utilizara UDP. La línea de comando utilizada para ejecutar el código y lograr la captura (disparada desde otra terminal) que se anexa al final del script fue la siguiente: redhat/~# perl time_udp.pl ################################################################## #!/bin/perl use Net::Time qw(inet_time); # carga el modulo Net::Time. $tiempo_udp=inet_time('dragonlinux.example.net' ,'udp'); # Utiliza la función inet_time() para retornar el tiempo. print "$tiempo_udp\n"; # imprime el tiempo. ############################################################# Captura realizada sobre la ejecución de este script. Código Fuente de time_udp.pl. 5-6 Referencias: Web: 1 SITIO: http://www.perldoc.com/perl5.6/lib/Net/Time.html