node dns
1.0.0
該專案是用於教育目的的 Node.js 和 Typescript 中 DNS 協定的實作。如果您有興趣了解 DNS 的工作原理,或者想知道如何在 Node.js 中實現 DNS 解析器、名稱伺服器,甚至網路協議,那麼這是適合您學習的專案。
www.instagram.com
此範例示範如何為www.instagram.com
建立 DNS 查詢並將其傳送到 Google 的公共 DNS 伺服器。
async function lookup ( query : Buffer ) : Promise < Buffer > {
return new Promise ( ( resolve , reject ) => {
const client = dgram . createSocket ( 'udp4' ) ;
client . on ( 'error' , reject ) ;
client . on ( 'message' , ( message ) => {
client . close ( ) ;
return resolve ( message ) ;
} ) ;
client . on ( 'listening' , ( ) => {
const address = client . address ( ) ;
console . log ( `Listening on ${ address . address } : ${ address . port } ` ) ;
client . send ( query , 53 , '8.8.8.8' , ( err , bytes ) => {
if ( err ) {
return reject ( err ) ;
}
console . log ( `Sent ${ bytes } bytes to 8.8.8.8:53` ) ;
} ) ;
} ) ;
client . bind ( ) ;
} ) ;
}
async function main ( ) {
const builder = new DNSMessageBuilder ( ) ;
const message = builder
. withHeader (
new DNSMessageHeader ( {
id : 0x01 ,
isQuery : true ,
recursionDesired : true ,
} )
)
. withQuestions ( [
new QuestionEntry ( {
qname : 'www.instagram.com' ,
qclass : QCLASS . IN ,
qtype : QTYPE . AAAA ,
} ) ,
] )
. build ( ) ;
const encoder = new DNSEncoder ( message ) ;
const buffer = encoder . encode ( ) ;
const responseBuffer = await lookup ( buffer ) ;
const decoder = new DNSDecoder ( responseBuffer ) ;
const responseMessage = decoder . decode ( ) ;
console . log ( 'Response:' , responseMessage ) ;
}
main ( ) ;
學習如何使用這個項目的最佳方法是研究測試。您可以透過執行npm run test
來執行測試。