>  기사  >  웹 프론트엔드  >  도메인 이름 확인 모듈 DNS를 이해하는 방법을 배우는 Nodejs

도메인 이름 확인 모듈 DNS를 이해하는 방법을 배우는 Nodejs

青灯夜游
青灯夜游앞으로
2021-02-22 17:41:321973검색

도메인 이름 확인 모듈 DNS를 이해하는 방법을 배우는 Nodejs

이 글에서는 도메인 이름 확인 모듈 DNS에 대해 자세히 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

관련 추천: "nodejs Tutorial"

작동 방식

브라우저를 열고 위의 주소 표시줄에 URL을 입력하는 순간 Enter를 누른 후 많은 일이 일어났습니다. 우선, 컴퓨터는 0과 1만 이해합니다. 즉, 컴퓨터는 사람의 알파벳 주소만 이해합니다. IPv4인 경우 8비트 이진수 4개 그룹입니다. 인간의 편의를 위해 URL을 IP 주소로 변환하는 서비스가 필요합니다. 이것이 바로 DNS

 DNS 획득 과정 전체가 계층별로 캐시됩니다

 1. 브라우저는 자체 DNS 캐시를 검색합니다

 브라우저 DNS 캐시 시간은 DNS 서버가 반환하는 TTL 값과 관련이 없습니다.

 웹사이트 도메인 이름의 실제 IP 주소를 얻은 후 브라우저는 IP를 캐시하여 네트워크 요청 손실을 줄입니다. 각 브라우저에는 고정된 DNS 캐시 시간이 있으며, Chrome의 만료 시간은 1분입니다. 이 기간 동안 DNS는 다시 요청되지 않습니다.

 Chrome 브라우저에서 자체 DNS 캐시 시간을 확인하는 것이 더 편리합니다. 주소 표시줄

chrome://net-internals/#dns

  2. 운영 체제 자체 DNS 캐시 검색

3. 로컬 HOST 파일을 읽습니다. Windows에서의 경로는 일반적으로

c:\Windows\System32\drivers\etc\hosts

입니다. 4. 광대역 운영자에게 DNS 시스템 호출을 시작합니다. ISP, ISP 서버는 자체 캐시를 확인합니다

 5. 아직 캐시를 찾지 못한 경우 ISP 서버는 로컬 컴퓨터를 대신하여 반복적인 DNS 확인 요청을 시작합니다

 6. 그래도 실패하면 확인에 실패합니다

로컬 확인

 dns 모듈에는 두 가지 유형의 기능이 포함되어 있으며, 그 중 하나는 도메인 이름 확인을 위해 기본 운영 체제 도구를 사용하는 기능이며 네트워크 통신이 필요하지 않습니다. 이러한 함수는 단 하나뿐입니다: dns.lookup()

【dns.lookup(hostname[, options], callback)】

 이 메서드는 도메인 이름(예: 'cnblogs.com')을 처음 발견한 레코드로 확인합니다. A(IPV4) 또는 AAAA(IPV6). 매개변수 옵션은 객체 또는 정수일 수 있습니다. 옵션이 제공되지 않으면 IP v4 및 v6 주소가 모두 허용됩니다. 옵션이 정수인 경우 4 또는 6이어야 합니다.

 옵션 매개변수에는 다음 속성이 포함됩니다

family:地址协议族,必须为4或6的整数
hints:设置getaddrinfo的标志,dns.ADDRCONFIG 或者 dns.V4MAPPED(ipv4映射成ipv6)
all:false(默认),布尔值,如设置为true,则返回IP数组,否则返回单个IP地址
{
  family: 4,
  hints: dns.ADDRCONFIG | dns.V4MAPPED
}

 콜백 함수에는 매개변수(err, 주소, 가족)가 포함됩니다. address 매개변수는 IP v4 또는 v6 주소를 나타냅니다. family 매개변수는 4 또는 6으로, 주소 패밀리를 나타냅니다(이전에 조회에 전달된 값이 반드시 필요한 것은 아님). 오류가 발생하면 매개변수 err은 Error 객체이고 err.code는 오류 코드

  [참고] err.code는 'ENOENT'와 동일합니다. 이는 도메인 이름이 존재하지 않거나 다른 이유 때문일 수 있습니다. , 사용 가능한 파일 설명자가 없는 등

var dns = require('dns');
dns.lookup('www.cnblogs.com', function(err, address, family){
    console.log(err);//null
    console.log(address);//218.11.2.249
    console.log(family);//4});

 동일한 도메인 이름이 여러 개의 다른 IP에 해당할 수 있습니다. options = {all: true}

var dns = require('dns');
dns.lookup('www.qq.com',{all:true}, function(err, address, family){
    console.log(err);//null/*[ { address: '125.39.240.113', family: 4 },
  { address: '61.135.157.156', family: 4 } ] */
    console.log(address);
    console.log(family);//undefined});

【dns.lookupService(address, port, callback)】

lookup에 대응하여 lookupService() 메소드는 IP 주소와 포트에서 도메인 이름으로 역방향 확인을 수행하여 얻을 수 있습니다.

 이 메소드의 콜백 함수 매개변수는 (err, 호스트 이름, 서비스)입니다. 호스트 이름과 서비스는 모두 문자열(예: 'localhost' 및 'http')입니다. 오류가 발생하면 매개변수 err은 오류 객체이고 err.code는 오류 코드입니다

var dns = require('dns');
dns.lookupService('127.0.0.1',80,function(err, hostname, service){
    console.log(err);//null
    console.log(hostname);//bai
    console.log(service);//http});

네트워크 분석

dns.lookup()을 제외한 dns 모듈의 모든 함수는 실제 DNS에 연결해야 합니다. 도메인 이름을 위한 서버 구문 분석 기능, 항상 네트워크를 사용하여 DNS 쿼리를 수행합니다

【dns.resolve(hostname[, rrtype], callback)】

 이 방법은 도메인 이름(예: 'cnblogs.com')을 확인합니다. 레코드 유형 배열을 지정하는 rrtype에

  유효한 rrtypes 값은 다음과 같습니다.

'A' (IPV4 地址, 默认)'AAAA' (IPV6 地址)'MX' (邮件交换记录)'TXT' (text 记录)'SRV' (SRV 记录)'PTR' (用来反向 IP 查找)'NS' (域名服务器 记录)'CNAME' (别名 记录)'SOA' (授权记录的初始值) 

콜백 매개변수는 (err, addresses). 其中 addresses 中每一项的类型都取决于记录类型。出错时,参数err 是 Error 对象,err.code 오류 코드입니다.

var dns = require('dns');
//IPV4
dns.resolve('www.qq.com',function(err,address){
    console.log(address);//[ '125.39.240.113', '61.135.157.156' ]
});

//IPV6
dns.resolve('www.qq.com','AAAA',function(err,address){
    console.log(address);//[ '240e:e1:8100:28::2:16' ]
});

//别名
dns.resolve('www.qq.com','CNAME',function(err,address){
    console.log(address);//undefined
});

【dns.resolve4(hostname, callback)】

  dns.resolve()와 유사합니다. IPv4(A 레코드)만 쿼리할 수 있습니다.

var dns = require('dns');
dns.resolve4('www.qq.com',function(err,address){
    console.log(address);//[ '125.39.240.113', '61.135.157.156' ]
    });

【dns.reverse(ip, callback)】

 이 방법은 IP 주소를 역으로 확인하고 해당 IP 주소를 가리키는 도메인 이름 배열을 반환하는 데 사용됩니다. 콜백 함수 매개변수(err, 호스트 이름). 오류가 발생하면 매개변수 err은 오류 객체이고 err.code는 오류 코드입니다

var dns = require('dns');
dns.reverse('114.114.114.114',function(err,hostnames){
    console.log(hostnames);//'public1.114dns.com'
    });

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 튜토리얼을 방문하세요! !

위 내용은 도메인 이름 확인 모듈 DNS를 이해하는 방법을 배우는 Nodejs의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제