Net::NTP - Perl extension for decoding NTP server responses
Contents
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).
Copyright And License
Copyright 2009 by Ask Bjørn Hansen; 2004 by James G. Willmore
This library is free software; you can redistribute it and/or modify it under the same terms as Perl
itself.
Description
Representation of a NTP Packet with serialization primitives.
PROTOCOL-RFC5905-Section7.
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.
perl v5.36.0 2022-10-13 Net::NTP(3pm)
Limitations
This only supports Association Mode 3 (Client).
Name
Net::NTP::Packet
See Also
perl, IO::Socket, RFC5905, RFC1305, RFC2030
Synopsis
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"
