node dns
1.0.0
Этот проект представляет собой реализацию протокола DNS в Node.js и Typescript для образовательных целей. Если вы хотите узнать, как работает DNS, или задаетесь вопросом, как реализовать преобразователь DNS, сервер имен или даже сетевой протокол в Node.js, этот проект для вас.
www.instagram.com
в общедоступном DNS Google. В этом примере показано, как создать DNS-запрос для www.instagram.com
и отправить его на общедоступные DNS-серверы Google.
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
.