当我们收到截断的DNS响应时会发生什么?

时间:2014-11-30 06:59:43

标签: sockets dns

我正在编写一个非常简单的程序来发送CERT查询并通过UDP从DNS接收响应并使用wireshark进行调试。我将查询作为十六进制字符串发送并从同一个套接字接收响应但是,即使我在wireshark中看到完整的字符串(响应),我的程序打印的响应也会被截断。任何人都可以向我解释收到回复时究竟发生了什么?我测量的响应与我发送的查询相同!请给出建议,我的代码出错了,不知道应该如何捕获响应。感谢。

char recv_buffer[4096]; //to allocate the response

//sending query and receiving response 
to = sendto(sock, buffer, sizeof(buffer), 0, (struct sockaddr *) &sock_addr, sizeof(sock_addr));
printf("sent %d bytes to 140.113.216.171\n", to);

int len = sizeof(recv_buffer);
bzero(&recv_buffer, len); //filling with 0 the recv_buffer

from = recvfrom(sock, recv_buffer, len, 0, NULL, NULL);
printf("received %d bytes from 140.113.216.171\n", from);

//Printing the string received
for(int c=0;c<from;c++){
   printf("%c",recv_buffer[c]);
}

1 个答案:

答案 0 :(得分:0)

//Printing the string received
for(int c=0;c<to;c++){

这可能意味着from而不是to,因为您希望获得接收的字节数,而不是已发送。