Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use IO::Socket;
- $offset=$ARGV[0];
- $offset=0 if (!$offset);
- my $MAXLEN = 1024;
- my $sock = IO::Socket::INET->new(
- LocalPort => '123',
- Proto => 'udp')
- or die "socket: $@";
- print "NTP server started. Offset=$offset\n";
- while ($sock->recv($query, $MAXLEN)) {
- my ($port, $ipaddr) = sockaddr_in($sock->peername);
- $client = gethostbyaddr($ipaddr, AF_INET);
- $client=inet_ntoa($ipaddr);
- print "Connection from $client\n";
- my @octets=unpack ("B8B8B8B8 B32B32B32 B64B64B64B64",$query);
- $octets[0]='00'.(substr $octets[0],2,3).'100';
- $octets[1]='00000001'; #Stratum
- $octets[3]='11111010'; #Precision точность
- $octets[4]='00000000000000000000000000000000'; #Root Delay базовая задержка
- $octets[5]=$octets[4]; #Root Dispersion маскимальная ошибка из-за нестабильности часов
- $octets[6]='01010000010100000101001100000000'; #Reference ID ид эталонных часов
- $octets[7]=unpack("B*", pack("N", time()+2208988800)); #когда часы корректировались в последний раз
- $octets[8]=$octets[10];#определяет время, когда запрос направлен серверу
- $octets[9]=unpack("B*", pack("N", time()+2208988800+$offset));#время, когда запрос прибыл к серверу
- $octets[10]=$octets[9];#локальное время, когда послан отклик сервером
- my $answer=pack ("B8B8B8B8 B32B32B32 B64B64B64B64",@octets);
- $sock->send($answer);
- }
- die "recv: $!";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement