node dns
1.0.0
Este proyecto es una implementación del protocolo DNS en Node.js y Typecript con fines educativos. Si está interesado en aprender cómo funciona DNS o se pregunta cómo puede implementar un solucionador de DNS, un servidor de nombres o incluso un protocolo de red en Node.js, este es el proyecto adecuado para que lo estudie.
www.instagram.com
desde el DNS público de Google Este ejemplo muestra cómo crear una consulta DNS para www.instagram.com
y enviarla a los servidores DNS públicos de 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 ( ) ;
La mejor manera de aprender a utilizar este proyecto es estudiar las pruebas. Puede ejecutar las pruebas ejecutando npm run test
.