Node.js で DNS モジュールを使用する方法 (詳細なチュートリアル)

亚连
リリース: 2018-06-02 17:23:40
オリジナル
1734 人が閲覧しました

この記事では、Node.js の DNS モジュールの関連知識ポイントを詳細に紹介し、関連するサンプル コードを共有します。興味のある友人は参照してください。

1. DNS

Node.jsでは、ドメイン名検索とドメイン名解決処理を実装するDNSモジュールが提供されています。

  • DNS モジュールでは、3 つの主要なメソッドと一連の便利なメソッドが提供されています。

  • resolve メソッド: ドメイン名を DNS レコードのセットに解決するために使用されます。

  • リバースメソッド: IP アドレスをドメイン名のセットに変換するために使用されます。

  • lookup メソッド: ドメイン名を IP アドレスに変換するために使用されます。

  • DNS モジュールの残りの便利なメソッドは、resolve メソッドの便利な形式です。

2. ドメイン名を DNS レコードに解決するには、resolve メソッドを使用します

`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 サーバーを指定するために使用されるドメイン ネーム サーバー レコードです。

コールバック関数には 2 つのパラメーターがあります。 err は、ドメイン名解決が失敗したときにトリガーされるエラー オブジェクトです。 address パラメーターは、取得されたすべての DNS レコードを格納する配列です。

3.resolveメソッドにカスタマイズされた様々な便利なメソッド

  • DNS.resolve4(domain, callback)、IPv4アドレスを取得

  • DNS.resolve6(domain, callback)、IPv6アドレスを取得

  • DNS.resolveMx(domain, callback)、MX レコード、メール交換サーバー レコードの取得
  • DNS.resolveTxt(domain, callback)、TXT レコード、ドメイン名に添付された説明レコードの取得
  • DNS.resolveSrv (ドメイン, コールバック)、SRV レコード、サービス レコードを取得
  • DNS.resolveNs(domain, callback)、NS レコード、ドメイン ネーム サーバー レコードを取得
  • DNS.resolveCname(domain, callback)、エイリアス レコードを取得
4. lookup メソッドを使用して IP アドレスをクエリします


resolve4 メソッドまたはsolve6 メソッドを使用する場合、コールバック パラメーターにより取得されたすべての IPv4 アドレスまたは IPv6 アドレスがコールバック関数のアドレス パラメーター値の配列に格納されます。価値。したがって、DNS モジュールは、最初に検出された IPv4 アドレスまたは IPv6 アドレスを取得するための検索メソッドを提供します


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

    ドメイン パラメーターは、解決する必要があるドメイン名を指定するために使用される文字列です。ファミリー パラメーターの値は、取得する必要がある IP アドレスの種類を指定するために使用されます。は 4 または 6 です。デフォルトのパラメーター値は null です。これは、IPv4 と IPv6 の両方を取得できることを意味します
  • コールバック関数の err パラメーター値は、ドメイン名の取得が失敗したときにトリガーされるエラー オブジェクトです。存在するかクエリが失敗した場合、エラー オブジェクトのコード属性は ENOENT です
  • アドレス パラメータの値は取得された IP アドレスである文字列です
  • family パラメータの値が 4 の場合、それは次のことを表しますIPv4 アドレス、6 の場合は IPv6 アドレスを表します。
  • 5. リバースメソッドを使用して IP アドレスを逆解決します

DNS モジュールで、リバースメソッドを使用して、IP アドレスにバインドされた一連のドメイン名を逆解決します

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


ip パラメータ値は文字列で、解析する必要がある IP アドレスを指定するために使用されます

    コールバック関数は逆解析です アドレスが失敗した後のエラー オブジェクト
  • domains パラメータ値は、取得されたすべてのドメイン名を格納する配列です
  • 6 DNS モジュール内のさまざまなエラー コード

パラメータ値は、解析または逆解析操作中にトリガーされたエラー オブジェクトについては、エラー オブジェクトの code 属性値、つまりトリガーされたエラー コードに基づいて、どのようなエラーが発生したかを判断できます


ENODATA: DNSサーバーはデータなしでクエリ結果を返します

  • EFORMERR: DNS サーバーは、クライアントがクエリのリクエスト時に不正な形式のクエリ パラメーターを使用したことを検出しました

  • ESERVFAIL: DNS サーバーはクエリ操作の実行に失敗しました

  • ENOTFOUND: ドメイン名が見つかりませんでした

  • ENOTIMP: DNS サーバー クライアントによって要求されたクエリ操作を実行できません

  • EREFUSED: DNS サーバーがクエリ操作の実行を拒否しました

  • EBADQUERY: DNS クエリの形式が正しくありません

  • EBADNAME: ドメイン名の形式は間違っていないebadfamily:サポートされていないIPアドレスタイプ

  • ebadResp:DNS返信フォーマットエラー

  • エコーフ化:DNSサーバーとの接続を確立できない

  • eetimeOut: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 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート