>  기사  >  웹 프론트엔드  >  Node.js에서 DNS 모듈을 사용하는 방법(자세한 튜토리얼)

Node.js에서 DNS 모듈을 사용하는 방법(자세한 튜토리얼)

亚连
亚连원래의
2018-06-02 17:23:401708검색

이 글에서는 Node.js의 DNS 모듈 관련 지식 포인트를 자세히 소개하고, 관심 있는 친구들이 참고할 수 있도록 관련 예제 코드를 공유합니다.

1. DNS

Node.js에서는 도메인 이름 검색 및 도메인 이름 확인 처리를 구현하기 위해 DNS 모듈이 제공됩니다.

  • DNS 모듈에서는 세 가지 주요 방법과 일련의 편리한 방법을 제공합니다.

  • resolve 방법: 도메인 이름을 DNS 레코드 집합으로 확인하는 데 사용됩니다.

  • 역방향 방법: IP 주소를 도메인 이름 집합으로 변환하는 데 사용됩니다.

  • 조회 방법: 도메인 이름을 IP 주소로 변환하는 데 사용됩니다.

  • DNS 모듈의 나머지 편의 메서드는 확인 메서드의 편의 형식입니다.

2. 도메인 이름을 DNS 레코드로 확인하려면 확인 방법을 사용하세요

`DNS.resolve(domain, [rrtype], callback(err, address){...})`

domain 매개변수는 확인해야 하는 도메인 이름을 지정하는 데 사용되는 문자열이며, 하위 도메인 이름을 포함할 수 있습니다.
rrtypr 매개변수는 획득할 레코드 종류를 지정하는 데 사용되는 문자열입니다. 지정할 수 있는 레코드 종류는 다음과 같습니다.

  • A, 이 매개변수 값은 기본값입니다. 레코드 유형이 A인 경우 레코드는 IPv4 주소를 도메인 이름에 매핑합니다.

  • AAAA, 레코드 유형이 AAAA인 경우 이 레코드는 IPv6 주소를 도메인 이름에 매핑합니다.

  • CNAME, 레코드 유형이 CNAME이면 레코드가 도메인 이름의 별칭 레코드임을 의미합니다. 예를 들어 www.example.com 도메인 이름 레코드는 example.com 도메인의 별칭 레코드일 수 있습니다. 이름 기록.

  • MX, MX 레코드는 SMTP를 사용하는 도메인의 메일 서버를 가리킵니다. 예를 들어 person@domain.com 이메일 주소로 이메일을 보내려는 경우 domain.com 도메인의 MX 레코드는 다음과 같습니다. 메일 서버 주소를 보낼 때 저장됩니다.

  • TXT, TXT 레코드는 도메인 이름에 첨부된 설명 레코드입니다.

  • SRV, SRV 레코드는 특정 도메인에서 사용 가능한 모든 서비스에 대한 정보를 제공하는 데 사용됩니다.

  • PTR, PTR 레코드는 도메인 이름을 IPv4 주소에 매핑하는 역방향 주소 확인에 사용됩니다.

  • NS, NS(이름 서버) 레코드는 도메인 이름을 확인하는 DNS 서버를 지정하는 데 사용되는 도메인 이름 서버 레코드입니다.

콜백 함수에는 두 개의 매개변수가 있습니다. err은 도메인 이름 확인이 실패할 때 발생하는 오류 개체입니다. 주소 매개변수는 획득한 모든 DNS 레코드를 저장하는 배열입니다.

3. 해결 방법에 맞춰 다양하고 편리한 방법

  • DNS.resolve4(도메인, 콜백), IPv4 주소 가져오기

  • DNS.resolve6(도메인, 콜백), IPv6 주소 가져오기

  • DNS.resolveMx(도메인, 콜백), MX 레코드 가져오기, 메일 교환 서버 레코드

  • DNS.resolveTxt(도메인, 콜백), TXT 레코드 가져오기, 도메인 이름 첨부 설명 레코드

  • DNS.resolveSrv (도메인, 콜백), SRV 레코드 가져오기, 서비스 레코드

  • DNS.resolveNs(도메인, 콜백), NS 레코드 가져오기, 도메인 이름 서버 레코드

  • DNS.resolveCname(도메인, 콜백), 별칭 레코드 가져오기

4.lookup 메소드를 사용하여 IP 주소를 조회합니다.

resolve4 메소드나 resolve6 메소드를 사용할 경우 콜백 함수의 주소 매개변수 값 배열에는 콜백 매개변수로 인해 얻은 모든 IPv4 주소 또는 IPv6 주소가 저장됩니다. 값. 따라서 DNS 모듈은 처음 발견된 IPv4 주소 또는 IPv6 주소

`DNS.lookup(domain, [family], callback(err, Addresss, family){...}) `

    을 얻기 위한 조회 방법을 제공합니다.
  • domain 매개변수는 확인해야 하는 도메인 이름을 지정하는 데 사용되는 문자열입니다.

  • family 매개변수 값은 가져와야 하는 IP 주소 유형을 지정하는 데 사용되는 정수 값입니다. 지정할 수 있는 값은 4 또는 6입니다. , 기본 매개 변수 값은 null입니다. 이는 IPv4와 IPv6를 모두 얻을 수 있음을 의미합니다

  • 콜백 함수 err 매개 변수 값은 주소 가져오기에 실패할 때 발생하는 오류 개체입니다. 도메인 이름이 존재하지 않거나 쿼리가 실패하면 오류 객체의 코드 속성 값은 ENOENT

  • 주소 매개변수 값은 문자열이며, 이는 획득한 IP 주소

  • 패밀리 매개변수 값이 다음과 같은 경우입니다. 4이면 IPv4 주소를 나타내고, 6이면 IPv6 주소를 나타낸다.

5 역방향 방법을 사용하여 IP 주소를 역으로 확인하세요

DNS 모듈에서 역방향 방법을 사용하여 IP 주소를 IP 주소에 바인딩된 도메인 이름 집합으로 역방향으로 확인하세요

`DNS .reverse(ip, callback(err, domains){...})`

  • ip 매개변수 값은 구문 분석해야 하는 IP 주소를 지정하는 데 사용되는 문자열입니다.

  • 오류 콜백 함수가 역분석 중입니다. 주소 실패 후 오류 개체

  • domains 매개 변수 값은 획득한 모든 도메인 이름을 저장하는 배열입니다.

6 DNS 모듈의 다양한 오류 코드

오류 매개변수 값은 다양한 실행을 위한 것입니다. 파싱이나 역파싱 작업 중에 발생한 오류 개체에 대해 해당 오류 개체의 코드 속성 값, 즉 발생한 오류 코드

  • ENODATA: DNS를 기반으로 어떤 오류가 발생했는지 확인할 수 있습니다. 서버는 데이터 없이 쿼리 결과를 반환합니다

  • EFORMERR: 쿼리를 요청할 때 클라이언트가 잘못된 쿼리 매개 변수를 사용한 것을 DNS 서버가 발견했습니다.

  • ESERVFAIL: DNS 서버가 쿼리 작업을 수행하지 못했습니다.

  • ENOTFOUND: 도메인 이름을 찾을 수 없습니다

  • ENOTIMP: DNS 서버 클라이언트가 요청한 쿼리 작업을 수행할 수 없습니다

  • EREFUSED: DNS 서버가 쿼리 작업 수행을 거부했습니다

  • EBADQUERY: DNS 쿼리 형식이 잘못되었습니다

  • EBADNAME: 도메인 이름 형식은 다음과 같습니다. 부정확

  • EBADFAMILY: 지원되지 않는 IP 주소 유형

  • EBADRESP: DNS 응답 형식이 잘못되었습니다.

  • ECONNREFUSED: DNS 서버에 대한 연결을 설정할 수 없습니다.

  • ETIMEOUT: 다음에 대한 연결 DNS 서버 시간이 초과되었습니다

  • EEOF: 이미 파일 맨 아래에 도달했습니다.

  • EFILE: 파일을 읽지 못했습니다.

  • ENOMEM: 메모리 공간이 부족합니다.

  • EDESTRUCTION: 채널이 파괴되었습니다.

  • EBADSTR: 문자열 형식 오류

  • EBADFLAG S: 잘못된 판단 플래그가 지정되었습니다

  • ENONAME: 지정된 호스트 이름이 숫자 형식이 아닙니다

  • EBADHINTS: 지정된 프롬프트 플래그가 잘못되었습니다

  • ENOTINITIALIZED: c-ares 클래스 라이브러리 초기화 작업이 완료되지 않았습니다

  • ELOADIPHLPAPI: iphlpapi.dll을 로드하는 동안 오류가 발생했습니다

  • EADDREGETNETWORKPARAMS: GetNetworkParams 함수를 찾을 수 없습니다

  • ECANCELLED: DNS 쿼리 작업이 취소되었습니다

7. DNS 모듈의 기본 사용법

const dns = require('dns');
let url = 'www.qq.com';

dns.resolve(url, 'A', (err, addresses) => {
  console.log(addresses);
  // IPv4地址 [ '103.7.30.123' ]
});

dns.resolve(url, 'AAAA', (err, addresses) => {
  console.log(addresses);
  // IPv6地址 [ '240e:e1:8100:28::2:16' ]
});
dns.resolveMx('qq.com', (err, addresses) => {
  console.log(addresses);
  // 邮件交换服务器记录
  // [ { exchange: 'mx2.qq.com', priority: 20 },
  //  { exchange: 'mx1.qq.com', priority: 30 },
  //  { exchange: 'mx3.qq.com', priority: 10 } ]
  
});

dns.resolveTxt('qq.com', (err, addresses) => {
  console.log(addresses);
  // 域名附加的描述记录
  // [ [ 'v=spf1 include:spf.mail.qq.com -all' ] ]
});

dns.resolveSrv('www.baidu.com', (err, addresses) => {
  console.log(addresses);
  // 服务记录
  // []
});

dns.resolveNs('www.github.com', (err, addresses) => {
  console.log(addresses);
  // 域名服务器记录
  // [ 'ns-421.awsdns-52.com',
  // 'ns-520.awsdns-01.net',
  // 'ns1.p16.dynect.net',
  // 'ns2.p16.dynect.net',
  // 'ns3.p16.dynect.net',
  // 'ns4.p16.dynect.net',
  // 'ns-1283.awsdns-32.org',
  // 'ns-1707.awsdns-21.co.uk' ]
});

dns.resolveCname('www.163.com', (err, addresses) => {
  console.log(addresses);
  // 获取别名记录
  // [ 'www.163.com.lxdns.com' ]
});


dns.lookup('google.com', 4, (err, address, family) => {
  // 查询IP地址
  // address,查询到的地址
  // family,IPv4或IPv6
  console.log(address);// 172.217.27.142
  console.log(family);// 4
});

dns.lookup('google.com', 6, (err, address, family) => {
  console.log(address);// 2404:6800:4008:803::200e
  console.log(family);// 6
});

dns.reverse('203.188.200.67', (err, domain) => {
  // 反向解析IP地址
  console.log(domain);
  // [ 'media-router-fp1.prod.media.vip.tp2.yahoo.com' ]
});

위 내용은 앞으로 모든 사람에게 도움이 되기를 바랍니다.

관련 기사:

vue-router 관련 기본 지식 및 작동 원리

axios 게시물 제출 양식 데이터 예시

vue 구성 요소에서 axios를 사용하는 방법

위 내용은 Node.js에서 DNS 모듈을 사용하는 방법(자세한 튜토리얼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.