NTP 解析

1.

202.107.6.88
22 02 30 E7 00 00 03 13 00 00 00 44 64 6B 19 72 E6 BA E0 03 50 79 91 F4 30 30 30 30 30 30 30 30 E6 BA E0 2A FB B4 D1 98 E6 BA E0 2A FB B5 79 31 





【Hex】
LI[2bits],VN[3bits],Mode[3bits],Statum[8bits],Poll[8bits],Precision[8bits]
				RootDelay		RootDispersion	ReferenceIdentifier		ReferenceTimestamp			OriginateTimestamp			ReceiveTimestamp			TransmitTimestamp
				根延时			根描述			参考标志				T3 参考时间戳				T0 起源时间戳[请求时的T2] 	T1 接收时间戳				T2	传输时间戳
0  1  2  3      4  5  6  7      8  9  10 11     12 13 14 15             16 17 18 19 20 21 22 23     24 25 26 27 28 29 30 31     32 33 34 35 36 37 38 39		40 41 42 43 44 45 46 47
22 02 30 E7 	00 00 03 13 	00 00 00 4B 	64 6B 19 72 			E6 BA EB D9 E2 DF 8C 97 	30 30 30 30 30 30 30 30 	E6 BA EC 67	21 74 DB 15 	E6 BA EC 67	21 75 A4 EA 
22 02 30 E7 	00 00 03 13 	00 00 00 50 	64 6B 19 72 			E6 BA EB D9 E2 DF 8C 97 	30 30 30 30 30 30 30 30 	E6 BA EC B1	B1 D0 60 92 	E6 BA EC B1	B1 D1 5A F4 
22 02 30 E7 	00 00 03 13 	00 00 00 51 	64 6B 19 72 			E6 BA EB D9 E2 DF 8C 97 	30 30 30 30 30 30 30 30 	E6 BA EC C8	36 E9 BC 3C 	E6 BA EC C8	36 EA 3F E4 
22 02 30 E7 	00 00 03 13 	00 00 00 45 	64 6B 19 72 			E6 BA ED 1C 67 15 56 B6 	30 30 30 30 30 30 30 30 	E6 BA ED 46 37 35 5D 5E 	E6 BA ED 46 37 36 3B 2C 
22 02 30 E7 	00 00 03 13 	00 00 00 45 	64 6B 19 72 			E6 BA ED 1C 67 15 56 B6 	30 30 30 30 30 30 30 30 	E6 BA ED 50 05 BD 22 A9 	E6 BA ED 50 05 BD 7B 2B
22 02 30 E7 	00 00 03 15 	00 00 00 42 	64 6B 19 72 			E6 BA F0 66 25 58 73 44 	30 30 30 30 30 30 30 30 	E6 BA F0 72 05 C1 DC C4 	E6 BA F0 72 05 C5 6C 71 
22 02 30 E7 	00 00 03 15 	00 00 00 42 	64 6B 19 72 			E6 BA F0 66 25 58 73 44 	30 30 30 30 30 30 30 30 	E6 BA F0 72 05 C1 DC C4 	E6 BA F0 72 05 C5 6C 71 


#define JAN_1970      0x83aa7e80      // (2208988800) 1900年到1970年的秒数

ReferenceTimestamp:[33][34][35][36]	[37][38][39][40]
					【E6 BA F0 66】		【25 58 73 44】
0xE6BAF066 - 0x83aa7e80 = 0x631071E6 = 1662022118 [Unix时间戳] = 2022-09-01 16:48:38

【C代码】
target_timestamp = buf[40] << 24 | buf[40 + 1] << 16 | buf[40 + 2] << 8 | buf[40 + 3]; // 当前时间戳
local_timestamp = target_timestamp - NTP_TIMESTAMP_DELTA;							   // 减去1970和1900的差值
#define NTP_TIMESTAMP_DELTA 2208988800
【对应分析】
0xE6BAF07205 - 0x83aa7e80 = 0xE63745F385 =988 769 809 285
	
	
【C代码】
t2.integer = buf[32] << 24 | buf[32 + 1] << 16 | buf[32 + 2] << 8 | buf[32 + 3];	//0xE6 BA EC 67
t2.integer = t2.integer - NTP_TIMESTAMP_DELTA; 										// 0xE6 BA EC 67 - 0x83aa7e80 = 0x63106DE7 = 1 662 021 095 = 1970-01-01 08:00:01
t2.fraction = buf[36] << 24 | buf[36 + 1] << 16 | buf[36 + 2] << 8 | buf[36 + 3];	//0x21 74 DB 15
t2.fraction = GETUSEC( t2.fraction );
【对应分析】


【C代码】
t3.integer = local_timestamp;
t3.fraction = buf[44] << 24 | buf[44 + 1] << 16 | buf[44 + 2] << 8 | buf[44 + 3]; 	//0x21 75 A4 EA
t3.fraction = GETUSEC( t3.fraction );


local_tick = t3.integer + t.integer; //T4表示接收时间加上时间延迟 t3服务器回传时间
local_ms = t3.fraction + ( t.fraction / 10 );

UTC_time_set( local_tick );
UTC_ms_set( local_ms );

  

posted @ 2022-09-07 16:27  glpa  阅读(77)  评论(0编辑  收藏  举报