# #!/usr/bin/perl # # NTP_requester v0.2 # Autor: Daniel Medianero - dmedianero@gmail.com - http://www.meleagro.es.kz # # Script que realiza peticiones sobre una lista de NTP's # y muestra sus timestamps para analizar visualmente si están sincronizados entre sí. # # Uso: Editar el array @lista_servidores para incluir la lista y ejecutar con ./ntp_requester.pl # # NOTA: Es evidente que la sincronización entre servidores NTP debe revisarse a nivel de configuración, # ya que los retardos en el envío de paquetes no aseguran que las peticiones lleguen simultaneamente. # Además las peticiones se realizan en modo secuencial. # El presente script tiene por objeto poder realizar en remoto una comprobación visual que pueda # descartar a simple vista servidores no sincronizados de manera evidente # # Dependencias use strict; use Net::NTP; use Net::DNS; # Declaración de variables my @lista_servidores = ('1.at.pool.ntp.org','3.es.pool.ntp.org','1.europe.pool.ntp.org','0.us.pool.ntp.org','1.north-america.pool.ntp.org'); my @lista_ip_servidores = (); my @response = { }; my @receive_timestamp = (); my @transmit_timestamp = (); my @originate_timestamp = (); my @reference_timestamp = (); # Traductor de DNS a IP foreach (@lista_servidores){ my $res = Net::DNS::Resolver->new; my $query = $res->search("$_"); if ($query) { foreach my $rr ($query->answer) { next unless $rr->type eq "A"; push(@lista_ip_servidores, $rr->address); } } } # Peticiones NTP foreach (@lista_ip_servidores){ my %response = get_ntp_response("$_", "123"); push(@receive_timestamp, $response{'Receive Timestamp'}); push(@transmit_timestamp, $response{'Transmit Timestamp'}); push(@originate_timestamp, $response{'Originate Timestamp'}); push(@reference_timestamp, $response{'Reference Timestamp'}); } # Mostrar los resultados de manera que pueda inspeccionarse visualmente print "\nTimestamp de servidores NTP\nntp_requester v0.2\nDaniel Medianero - http://www.meleagro.es.kz\n\n"; print "Servidor NTP Receive Timestamp Transmit Timestamp Originate Timestamp Reference Timestamp\n\n"; my $i = ""; for ($i=0; $i<=$#lista_ip_servidores; $i++){ print "@lista_ip_servidores[$i] "; printf '%4f ',"@receive_timestamp[$i]"; printf '%4f ',"@transmit_timestamp[$i]"; printf '%4f ',"@originate_timestamp[$i]"; printf '%4f ',"@reference_timestamp[$i]"; print "\n"; } print "\n";