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
.