5 Time

Anuncio
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
Descargar