向NTP服务器发送特定报文,即可收到回复,不考虑传输延迟的话,解析时间很简单。
测试可用的NTP服务器:202.120.2.101 端口:123
例如发送的报文:(48字节)1b 00 04 fa 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
收到的回复是:(48字节)
1C 03 04 E9 00 00 0A 07 00 00 0E 04 CA 76 01 82 D9 FD 82 DE 62 51 F1 C6 00 00 00 00 00 00 00 00 D9 FD 84 95 94 F8 59 7C D9 FD 84 95 94 FB 59 E1
然后就可以根据协议解析时间了。
上图用网络调试助手发送和接收
参考代码:
#include <stdio.h>
#include "winsock2.h"
#include <time.h>
#include <conio.h>
#pragma comment (lib,"ws2_32.lib")//连入库文件
//******************************//
// 定义一个结构,就是NTP包的结构//
//******************************//
/*NTP 消息的格式被显示如下。
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 根延迟 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 根差量 |
+-+-+-+-+-+-+-