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