如何在C中将dns名称转换为主机名字符串?
我需要将dns名称转换回主机名字符串,例如:如何在C中将dns名称转换为主机名字符串?,c,dns,hostname,C,Dns,Hostname,我需要将dns名称转换回主机名字符串,例如: 03 77 77 06 67 6F 6F 67 6C 65 03 63 6F 6D 我想把它转回到: intj=0; 整数计数=0; int quadCount=0; char-asc[256]; printf(“\nhostname\n”); 对于(int i=0;i
03 77 77 06 67 6F 6F 67 6C 65 03 63 6F 6D 我想把它转回到:
intj=0;
整数计数=0;
int quadCount=0;
char-asc[256];
printf(“\nhostname\n”);
对于(int i=0;i
此代码捕获问题(udp_有效负载),并将编码的主机名保存到asc字符串。这已经是一个主机名字符串。。。视为其十六进制字节表示形式。在你要做的事情上,你必须更清楚一些,给我们看一些代码。我有一个服务器接收DNS请求,就像中间的一个人,抓住一个域名。dns查询包含一个大问题,我只获取其中主机名的十六进制字节表示形式。然后我想使用字符串“www.google.com”来做一些事情,问题是什么,来提取被查询的域?然后你真的需要学习DNS协议,每一个字节和比特都在做什么和意味着什么。互联网上有很多关于它的资源,更不用说了。这就是你需要学习协议的原因,你需要知道消息的每一部分意味着什么,以及如何以你想要的格式提取你想要的数据。这里没有捷径,你必须自己学习。不要重新发明东西。使用正确的DNS库。您至少缺少一个要点:可以在DNS数据包中压缩名称。如前所述,您可能希望从阅读RFC1034和1035开始,如果您真的坚持自己进行解析,而不是使用库,那么可以多次阅读RFC1034和1035。点永远不会在导线上传输,格式为[label length][bytes for the label],在每个标签上重复,直到到达0x00(根)。
int j = 0;
int count = 0;
int quadCount = 0;
char asc[256];
printf("\nhostname\n");
for (int i = 0; i < len; i++){
if (udp_payload[i] == 0){
count += 2;
}
else
count = 0;
if (count == 4){
quadCount ++;
}
else if (quadCount == 2){
printf(" %02X", (unsigned char)udp_payload[i]);
//save encoded hostname to a variable
asc[j] = udp_payload[i];
j++;
}
}