且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

发送到 NTP 服务器的 '\x1b' + 47 * '\0' 消息是什么意思?

更新时间:2023-01-17 10:47:08

"\x1b' + 47 * '\0" 表示一个 48 字节的数据字段.0x1B 后跟 47 次0代码>.48 字节是 NTP UDP 数据包的大小.第一个字节 (0x1B) 指定 LIVNMode.

"\x1b' + 47 * '\0" represents a data field of 48 bytes. 0x1B followed by 47 times 0. 48 bytes is the size of an NTP UDP packet. The first byte (0x1B) specifies LI, VN, and Mode.

RFC 5905 NTP 规范(7.3. 包头变量) 指定消息标题如下:

RFC 5905 NTP Specification (7.3. Packet Header Variables) specifies the message header as follows:

     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   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

设置数据的第一个字节为0x1B00 011 011表示

Setting the first byte of the data to 0x1B or 00 011 011 means

LI   = 0    (Leap indicator)
VN   = 3    (Version number)
Mode = 3    (Mode, mode 3 is client mode)

您也可以使用更新的版本(VN = 4).这将需要将第一个标头字节设置为0x23 (00 100 011).

You may also use the more recent version (VN = 4). This would require the first header byte to be set to 0x23 (00 100 011).

模式定义为

     +-------+--------------------------+
     | Value | Meaning                  |
     +-------+--------------------------+
     | 0     | reserved                 |
     | 1     | symmetric active         |
     | 2     | symmetric passive        |
     | 3     | client                   |
     | 4     | server                   |
     | 5     | broadcast                |
     | 6     | NTP control message      |
     | 7     | reserved for private use |
     +-------+--------------------------+

指定 Mode = 3 表示该消息为客户端请求消息.

Specifying Mode = 3 indicates the message as a client request message.

将这样的数据包发送到 NTP 服务器的 123 端口将强制服务器发送回复包.

Sending such a packet to port 123 of an NTP server will force the server to send a reply package.