Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ 在c+中实现DNS查询+;根据RFC1035_C++_Dns_Network Programming_Bit Manipulation - Fatal编程技术网

C++ 在c+中实现DNS查询+;根据RFC1035

C++ 在c+中实现DNS查询+;根据RFC1035,c++,dns,network-programming,bit-manipulation,C++,Dns,Network Programming,Bit Manipulation,我的问题涉及为DNS查询构造DNS标头,如所定义。RFC声明每个DNS消息的格式如下: +----------------------------------+ | HEADER | +----------------------------------+ | QUESTION | +----------------------------------+ | ANSWER

我的问题涉及为DNS查询构造DNS标头,如所定义。RFC声明每个DNS消息的格式如下:

+----------------------------------+
|            HEADER                |
+----------------------------------+
|            QUESTION              |
+----------------------------------+
|            ANSWER                |
+----------------------------------+
|           AUTHORITY              |
+----------------------------------+
|           ADDITIONAL             |
+----------------------------------+
标题字段/节遵循以下格式:

 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                     ID                        |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   OPCODE  |AA|TC|RD|RA|   Z    |   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    QDCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ANCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    NSCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ARCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
如何定义头结构/对象来保存第二行的值?我看到的问题是,在这个字段中为不同的情况设置特定的位。我提出的唯一的设计仍然可以编译并且不违反RFC的定义,需要大量的位操作和位掩蔽

这是我考虑过的两个实现,但是我不认为这是一个理想的解决方案。

    struct messageHeader{
        short ID;
     //Start of second row which is broken into 2 bytes
        unsigned int QR : 1;
        unsigned int OPCODE : 4;
        unsigned int AA : 1;
        unsigned int TC : 1;
        unsigned int RD : 1;
     //Start of Second byte needed for row 2
        unsigned int RA : 1;
        unsigned int Z : 3;
        unsigned int RCODE : 4;
     //End Second row
        short QDCNT;
        short ANCNT;
        short NSCNT;
        short ARCNT;

    };//End Message Header Struct
我以前从未使用过这样的位字段,所以我不完全理解如何将位打包到这个字段中……我所知道的是,即使使用-pedantic标志,它编译时也没有错误,这让我有点害怕

二是:

struct messageHeader{
    short ID;
    short row2;
    short QDCNT;
    short ANCNT;
    short NSCNT;
    short ARCNT;
};/End Message Header Struct

对于第二个选项,我将使用这对于使用C-structure是非常危险的,因为需要通过网络发送 大端格式的整数(如powerPC),但最流行的处理器(intel)使用 小恩迪安。另外,取决于编译器,您不知道编译器是如何分布的 使用位域运算时,字中的位

我建议您搜索一些轻量级DNS实现, 并将其作为练习的基础

例如,您可以使用EmerCoin项目中的DNS服务器: