DIY乙個DNS查詢器 程式實現

2021-09-20 15:02:32 字數 1601 閱讀 1665

1資源記錄(resource record)中的rddata內容的格式。

2關於壓縮編碼的指標問題。

3**冗餘結構不清晰。

尤其是壓縮編碼的問題,困擾了我很久,找了很多中文資料,都說到當長度的值為「192」的時候為指標,下一位元組的內容即偏移的位置,但是在過程中卻發現存在該值為「193」的情況,一直不解了好久。這裡我給解釋下:

假設第13位元組內容為:05-6c-69-78-69-6e-02-6d-6e

翻譯為「5-l-i-x-i-n-2-m-e」

而其後的某個地方,同樣出現了lixin.me的字串,那麼就會使用指標編碼:"c0-0c」。

c0十進位制是192,代表下面的內容是乙個指標,0c是個位址,指向了data[12]的位置。

而為什麼會出現193呢,也好理解,因為用乙個位元組的內容來表示偏移,頂多也只能偏移256個位元組,那麼假設udp包有500個位元組長,而要指向第300位元組就無能為力了。因此實際上的偏移量不是由oc這個位元組內容決定的,正確的偏移量是:(cn-c0)*256+0c。

如果值為193,下一位元組為1,那麼具體偏移就是 (193-192)*256+1 。

還有一點要注意到就是可變長度的name欄位以什麼為結尾。有3中結尾方式:

1.長度+內容+~+長度0

2. 偏移標識+偏移量

3.長度+內容+~+偏移標識+偏移量

能成功解決該問題,主要還是靠資料,雖然知道rfc1034和rfc1035裡面一定有我要的內容,可惜外文比較難懂,一直看不下去,通過搜尋得到的中文和少量外文資料也沒說清楚。最後還得感謝《tcp-ip詳解卷一:協議》的第14章dns協議的介紹,雖然只有短短的17頁,但還是幫我解決了問題。所以在同樣搞協議的同學,不妨弄本先去瞧瞧,或者遇到問題也可以先去看看。

現在來說說這個程式了。

我按dns協議的結構把專案分成 mydnsheader.cs、mydnsquestion.cs、mydnsrecord.cs 這樣的3個大結構。

傳送dns請求時只需要構造mydnsheader和mydnsquestion結構,然後通過getbytes()函式得到構造好的位元組陣列,然後通過udp傳送出去。然後接受來自伺服器的響應,將接收到的位元組陣列通過parse(byte recvdata)方法讓3個結構去解析,最後通過這些結構的屬性字段獲取相應的查詢資訊。

其中的資源記錄,目前能分析 a記錄、soa記錄、txt記錄、cname記錄、mx記錄、ns記錄。

示例**:

mydns mydns = new mydns();//

//想8.8.8.8網域名稱伺服器查詢lixin.me這個網域名稱的a記錄, 

if (!mydns.search(「lixin.me」querytype.a, 「8.8.8.8」,null )) 

{//如果伺服器返回錯誤資訊,則顯示錯誤的內容

txtcontent.clear(); 

foreach (mydnsrecord item in mydns.record.records) 

{介面截圖:

我把**放在了codeplex.com 上面了。位址為:

歡迎園友測試。如果發現錯誤,請告知我。

DIY乙個DNS查詢器 程式實現

李鑫大牛的部落格 1資源記錄 resource record 中的rddata內容的格式。2關於壓縮編碼的指標問題。3 冗餘結構不清晰。尤其是壓縮編碼的問題,困擾了我很久,找了很多中文資料,都說到當長度的值為 192 的時候為指標,下一位元組的內容即偏移的位置,但是在過程中卻發現存在該值為 193 ...

DIY乙個簡易查詢系統

前段時間應需求計畫做乙個簡潔的 中藥毒 查詢 小工具 們提供了不少資料.最簡潔的還屬這個名單 我們預期一下我們希望做出乙個什麼東東,它應該 可以展示資料裡的藥物及其屬性關係.例如 柴胡 對應 小柴胡片 小柴胡顆粒 得生丸 安坤贊育丸。柴胡皂苷 能導致腎上腺肥大 胸腺萎縮,使人體免疫功能降低。有腎毒性...

DIY乙個粒子檢測器 2020 10

在tle207x低雜訊高速jfet 輸入運算放大器的雜訊特性測量中實現了tle207x的低雜訊放大器。放置在金屬盒遮蔽盒內進行訊號放大。基於上面的實驗電路,diy乙個粒子檢測器。其中bpx61來自 店bpx61.用於實驗的放射源來自離子煙霧感測器中的am241。實驗中的感測器和放射源 實驗電路採用在...