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
来运行测试。