Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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中将dns名称转换为主机名字符串?_C_Dns_Hostname - Fatal编程技术网

如何在C中将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

我需要将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

此代码捕获问题(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++;
        }
    }