node dns
1.0.0
Bei diesem Projekt handelt es sich um eine Implementierung des DNS-Protokolls in Node.js und Typescript für Bildungszwecke. Wenn Sie erfahren möchten, wie DNS funktioniert, oder sich fragen, wie Sie einen DNS-Resolver, einen Nameserver oder sogar ein Netzwerkprotokoll in Node.js implementieren können, ist dies das richtige Projekt für Sie.
www.instagram.com
im öffentlichen DNS von Google Dieses Beispiel zeigt, wie Sie eine DNS-Abfrage für www.instagram.com
erstellen und an die öffentlichen DNS-Server von Google senden.
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 ( ) ;
Der beste Weg, den Umgang mit diesem Projekt zu erlernen, ist das Studium der Tests. Sie können die Tests ausführen, indem Sie npm run test
ausführen.