gpt4 book ai didi

c - Ntp 服务器没有响应我的客户端

转载 作者:行者123 更新时间:2023-11-30 16:36:56 26 4
gpt4 key购买 nike

我写了一个非常小的ntp客户端,但是发送数据包后我没有收到服务器的响应,我已经用tcpdump确认了这一点。

我定义了一个结构体,用于传输ntp数据包。

struct NtpMessage_t {
unsigned int first_line;
unsigned int root_delay;
unsigned int root_dispertion;
unsigned int ref_id;
unsigned long long ref_timestamp;
unsigned long long origin_timestamp;
unsigned long long receive_timestamp;
unsigned long long transmit_timestamp;
};

在使用 message->first_line = 0b00100011000000000000000000000000; 填充数据包后,我将数据包发送到 de.ntp.pool.org 但没有收到响应。套接字初始化以及消息的发送和接收是通过以下代码完成的:

for (i = result; i != NULL; i = i->ai_next) {
cfd = socket(i->ai_family, i->ai_socktype, i->ai_protocol);

if (cfd != -1)
break;
}

if (i == NULL) {
fprintf(stderr, "Failed to create socket\n");
exit(EXIT_FAILURE);
}

NtpMessage *message = calloc(1, sizeof(NtpMessage));
message->first_line = 0b00100011000000000000000000000000;
if (sendto(cfd, message, sizeof(NtpMessage), 0, (struct sockaddr *) i->ai_addr, i->ai_addrlen) < 0) {
printf("Send failure: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}

if (recvfrom(cfd, message, sizeof(NtpMessage), 0, (struct sockaddr *) &from_addr, &from_addr_len) < 0) {
printf("Receive failure: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}

Tcpdump 为我提供了以下输出,从中我了解到我的消息已正确发送,但未收到任何答复:

MY_IP_ADDR.50318 > 64.99.80.121.123: [udp sum ok] NTPv0, length 48
unspecified, Leap indicator: (0), Stratum 0 (unspecified), poll 0 (1s), precision 35
Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
Reference Timestamp: 0.000000000
Originator Timestamp: 0.000000000
Receive Timestamp: 0.000000000
Transmit Timestamp: 0.000000000
Originator - Receive Timestamp: 0.000000000
Originator - Transmit Timestamp: 0.000000000

既然对方没有消息,那就意味着没有回应,如果我没记错的话。是这样吗?如果是,这里出了什么问题?我的代码有问题吗?

最佳答案

服务器不向您的 ntp 数据包发出响应的原因可能有很多很多。我发现您在示例中巧妙地隐藏了一些内容,因此问题很可能是对 NTP 协议(protocol)规范的无知。

如何填写数据包内容?您是否检查过编译器的备用字节来填补结构对齐的漏洞?您是否考虑到,在 NTP 协议(protocol)中,所有短、整型和 64 位时间戳都必须采用网络字节顺序(最重要的字节在前)???

最后,NTP 服务器通过忽略传入数据包来处理不正确的输入,但您假设数据包是正确的。

关于c - Ntp 服务器没有响应我的客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48244594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com