Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C将udp dns消息更改为tcp并返回_C_Networking_Tcp_Dns_Udp - Fatal编程技术网

C将udp dns消息更改为tcp并返回

C将udp dns消息更改为tcp并返回,c,networking,tcp,dns,udp,C,Networking,Tcp,Dns,Udp,我有两个变量:buf和length(char-buf[BUFSIZE],int-length)Buf包含使用UDP协议发送的DNS消息,在length中有该消息的长度。现在我需要更改buf,这样我可以将它与TCP协议一起使用,并将其发送到DNS服务器,获取响应,然后将响应更改回UDP协议 我知道我应该添加一些字节,然后删除一些字节,但我真的不知道是哪一个。因此,请帮助并在C中显示它。您需要打开第二个SOCK\u STREAM类型的套接字,然后使用send()发送buf的内容: sock = so

我有两个变量:
buf
length
char-buf[BUFSIZE],int-length
Buf
包含使用UDP协议发送的DNS消息,在
length
中有该消息的长度。现在我需要更改buf,这样我可以将它与TCP协议一起使用,并将其发送到DNS服务器,获取响应,然后将响应更改回UDP协议


我知道我应该添加一些字节,然后删除一些字节,但我真的不知道是哪一个。因此,请帮助并在
C
中显示它。

您需要打开第二个SOCK\u STREAM类型的套接字,然后使用send()发送
buf
的内容:

sock = socket( AF_INET, SOCK_STREAM, 0 );
connect(...);
send( sock, buf, length, 0 );

这是因为在使用套接字时,通常不会得到协议头,而只得到UDP/TCP负载。

那么
buf
包含原始以太网(或其他)帧?或者仅仅是应用程序负载?Buf get by this'lenght=recvfrom(mySocket,Buf,BUFSIZE-1,0,(struct sockaddr*)和clientAddress,&addr_len)'),并且该通信是通过dig程序进行的。我尝试了它,但问题是我从dns服务器获得了0长度的消息。我发现了一些关于从udp向消息添加两个字节长度的信息,但我不确定。