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
실행하여 테스트를 실행할 수 있습니다.