在C++中實現DNS查詢我的問題與爲RFC 1035定義的DNS查詢構建DNS標頭有關。每個DNS消息中的RFC狀態是按以下格式:按照RFC 1035
+----------------------------------+
| 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
因爲我會用< <運營商位轉移到正確的位置,用於排2.短期存在第二個選項這似乎是一個可怕的很多位操縱和位屏蔽給我,特別是對於這些代碼可能的所有不同組合。