delay($packet, $xmttime, $rectime)
Return the delay from the sender (B) of $packet given known local xmttime(T1) and rectime(T4)
delta = T(ABA) = (T4-T1) - (T3-T2).
NAME
Net::NTP - Perl extension for decoding NTP server responsesSYNOPSIS
use Net::NTP qw(get_ntp_response);
use Time::HiRes qw(time);
my %response = get_ntp_response();
my $xmttime = time();
my $spkt = Net::NTP::Packet->new_client_packet($xmttime);
$socket->send($pkt->encode());
$socket->recv(my $data, 1024);
my $rectime = time();
my $cpkt = Net::NTP::Packet->decode($data, $xmttime, $rectime);
print "Stratum: ", $cpkt->{stratum}, "\n";
print "Offset: ", Net::NTP->offset($pkt, $xmttime, $rectime), "\n"
ABSTRACT
All this module does is send a packet to an NTP server and then decode the packet received into it's respective parts - as outlined in RFC5905 (superseding RFC1305 and RFC2030).LIMITATIONS
This only supports Association Mode 3 (Client).DESCRIPTION
This module exports a single method (get_ntp_response) and returns an associative array based upon RFC1305 and RFC2030. The response from the server is ``humanized'' to a point that further processing of the information received from the server can be manipulated. For example: timestamps are in epoch, so one could use the localtime function to produce an even more ``human'' representation of the timestamp.EXPORT
get_ntp_response(<server>, <port>);This module exports a single method - get_ntp_response. It takes the server as the first argument (localhost is the default) and port to send/recieve the packets (ntp or 123 by default). It returns an associative array of the various parts of the packet as outlined in RFC1305. It ``normalizes'' or ``humanizes'' various parts of the packet. For example: all the timestamps are in epoch, NOT hexidecimal.
Two special fields ("Delay" and "Offset") are calculated and added to the response.
If there's a timeout or other communications error get_ntp_response will die (so call get_ntp_response in an eval block).
AUTHOR
Now maintained by Ask Bjorn Hansen, <[email protected]<gt>Originally by James G. Willmore, <jwillmore (at) adelphia.net<gt> or <owner (at) ljcomputing.net<gt>
Special thanks to Ralf D. Kloth <ralf (at) qrq.de<gt> for the code to decode NTP packets.
COPYRIGHT AND LICENSE
Copyright 2009 by Ask Bjorn Hansen; 2004 by James G. WillmoreThis library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
NAME
Net::NTP::PacketDESCRIPTION
Representation of a NTP Packet with serialization primitives.PROTOCOL - RFC 5905 - Section 7.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |LI | VN |Mode | Stratum | Poll | Precision | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Root Delay | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Root Dispersion | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reference ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Reference Timestamp (64) + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Origin Timestamp (64) + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Receive Timestamp (64) + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + Transmit Timestamp (64) + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Extension Field 1 (variable) . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Extension Field 2 (variable) . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Key Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | dgst (128) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
new
create a new Net::NTP::Packet instance.Parameters are the field names, gotten from ``7.3. Packet Header Variables''
new_client_packet($xmttime)
Make a packet in association mode 'Client' to be sent to a server.encode()
Encode a packet to its wire format. NOTE: It only encodes server packets at the moment.$packet = Net::NTP::Packet->decode($data, $xmttime, $rectime)
decode the NTP packet from its wire format.