Maison  >  Article  >  interface Web  >  Comment utiliser le module DNS dans Node.js (tutoriel détaillé)

Comment utiliser le module DNS dans Node.js (tutoriel détaillé)

亚连
亚连original
2018-06-02 17:23:401706parcourir

Cet article vous donne une introduction détaillée aux points de connaissances pertinents du module DNS dans Node.js, ainsi que l'exemple de code pertinent. Les amis intéressés peuvent s'y référer.

1. DNS

Dans Node.js, un module DNS est fourni pour implémenter le traitement de recherche de nom de domaine et de résolution de nom de domaine.

  • Dans le module DNS, trois méthodes principales et une série de méthodes pratiques sont fournies.

  • méthode de résolution : utilisée pour résoudre un nom de domaine en un ensemble d'enregistrements DNS.

  • méthode inverse : Utilisée pour convertir une adresse IP en un ensemble de noms de domaine.

  • méthode de recherche : utilisée pour convertir un nom de domaine en adresse IP.

  • Les méthodes pratiques restantes du module DNS sont une forme pratique de la méthode de résolution.

2. Utilisez la méthode de résolution pour résoudre le nom de domaine en un enregistrement DNS

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

Le paramètre de domaine est une chaîne, utilisée pour spécifier le nom de domaine qui doit être résolu et peut inclure des noms de sous-domaines.
Le paramètre rrtypr est une chaîne utilisée pour spécifier le type d'enregistrement à obtenir. Les types d'enregistrement qui peuvent être spécifiés sont les suivants.

  • A, cette valeur de paramètre est la valeur par défaut. Lorsque le type d'enregistrement est A, l'enregistrement mappe une adresse IPv4 à un nom de domaine.

  • AAAA, lorsque le type d'enregistrement est AAAA, cet enregistrement mappe une adresse IPv6 à un nom de domaine.

  • CNAME, lorsque le type d'enregistrement est CNAME, cela signifie que l'enregistrement est un enregistrement d'alias d'un nom de domaine. Par exemple, un enregistrement de nom de domaine www.example.com peut être un. Enregistrement de nom de domaine exemple.com.

  • MX, l'enregistrement MX pointe vers un serveur de messagerie dans un domaine qui utilise SMTP. Par exemple, lorsque vous souhaitez envoyer un e-mail à l'adresse e-mail personne@domain.com, le MX du domaine domain.com L'enregistrement contient l'adresse du serveur de messagerie à partir duquel l'e-mail a été envoyé.

  • TXT, l'enregistrement TXT est un enregistrement de description attaché au nom de domaine.

  • SRV, les enregistrements SRV sont utilisés pour fournir des informations sur tous les services disponibles dans un domaine spécifique.

  • PTR, l'enregistrement PTR est utilisé pour la résolution inversée d'adresse. Cet enregistrement mappe un nom de domaine à une adresse IPv4.

  • Les enregistrements NS, NS (Name Server) sont des enregistrements de serveur de noms de domaine, utilisés pour spécifier quel serveur DNS résout le nom de domaine.

La fonction de rappel a deux paramètres. err est l'objet d'erreur déclenché lorsque la résolution du nom de domaine échoue. Le paramètre adresses est un tableau qui stocke tous les enregistrements DNS obtenus.

3. Diverses méthodes pratiques personnalisées pour la méthode de résolution

  • DNS.resolve4(domain, callback), Get l'adresse IPv4

  • DNS.resolve6(domaine, rappel), obtenez l'adresse IPv6

  • DNS.resolveMx(domaine, rappel), obtenez les enregistrements MX, les enregistrements du serveur d'échange de courrier

  • DNS.resolveTxt (domaine, rappel), obtenir les enregistrements TXT, les enregistrements de description attachés au nom de domaine

  • DNS. solveSrv (domaine, rappel), obtenez les enregistrements SRV, les enregistrements de service

  • DNS.resolveNs (domaine, rappel), obtenez les enregistrements NS, les enregistrements du serveur de noms de domaine

  • DNS.resolveCname(domain, callback), obtenez l'enregistrement d'alias

Utilisez la méthode de recherche pour interroger l'adresse IP

Lors de l'utilisation de la méthode solve4 ou de la méthode solve6, car le tableau de valeurs du paramètre d'adresses dans la fonction de rappel de valeur de paramètre de rappel stocke toutes les adresses IPv4 ou IPv6 obtenues. Par conséquent, le module DNS fournit une méthode de recherche pour obtenir la première adresse IPv4 ou IPv6 découverte

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

  • Le paramètre de domaine est une chaîne, utilisée pour spécifier le nom de domaine qui doit être résolu

  • La valeur du paramètre de famille est une valeur entière, utilisée pour spécifier le type d'adresse IP à obtenir. La valeur du paramètre qui peut être spécifiée est 4 ou 6. La valeur du paramètre par défaut est nulle, ce qui signifie qu'IPv4 et IPv6 peuvent être obtenus

  • La valeur du paramètre err de la fonction de rappel est l'objet d'erreur déclenché lorsque l'adresse ne parvient pas à être obtenue. Lorsque le nom de domaine n'existe pas ou que la requête échoue, la valeur de l'attribut de code de l'objet d'erreur est. ENOENT

  • La valeur du paramètre d'adresses est une chaîne, qui est l'adresse IP obtenue

  • Lorsque la valeur du paramètre de famille est 4, elle est. représenté comme une adresse IPv4. Lorsqu'il vaut 6, il est représenté comme une adresse IPv6.

5. Utilisez la méthode inverse pour résoudre inversement une adresse IP

Dans le module DNS, utilisez la méthode inverse pour inverser une adresse IP. La direction se résout en un ensemble de noms de domaine liés à l'adresse IP

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

  • La valeur du paramètre ip est une chaîne, utilisée pour spécifier l'adresse IP qui doit être résolue

  • L'erreur de la fonction de rappel est l'objet d'erreur après l'échec de l'adresse de résolution inverse

  • La valeur du paramètre domains est un tableau qui stocke tous les noms de domaine obtenus

6. codes d'erreur dans le module DNS

La valeur du paramètre err est l'objet d'erreur déclenché lors de l'exécution de diverses opérations d'analyse ou d'analyse inverse. Vous pouvez déterminer quelle erreur s'est produite en fonction de la valeur de l'attribut de code du. objet d'erreur, c'est-à-dire le code d'erreur déclenché

  • ENODATA : Le serveur DNS a renvoyé un résultat de requête sans données

  • EFORMERR : Le serveur DNS a constaté que le client a utilisé des paramètres de requête mal formés lors de la demande d'une requête

  • ESERVFAIL : Le serveur DNS n'a pas réussi à effectuer l'opération de requête

  • ENOTFOUND : Aucun nom de domaine trouvé

  • ENOTIMP : Le serveur DNS ne peut pas effectuer l'opération de requête demandée par le client

  • EREFUSED : Le serveur DNS a refusé d'effectuer l'opération de requête

  • EBADQUERY : Requête DNS mal formée

  • EBADNAME : Format du nom de domaine est incorrect

  • EBADFAMILY : Type d'adresse IP non pris en charge

  • EBADRESP : réponse DNS mal formée

  • ECONNREFUSED : Impossible d'établir la connexion au serveur DNS

  • ETIMEOUT : délai d'attente pour établir la connexion au serveur DNS

  • EEOF : bas du fichier atteint

  • EFILE : Échec de la lecture du fichier

  • ENOMEM : Pas assez d'espace mémoire

  • EDESTRUCTION : Chaîne déjà détruite

  • EBADSTR : Erreur de format de chaîne

  • EBADFLAGS : indicateur de jugement incorrect spécifié

  • ENONAME : Le le nom d'hôte spécifié n'est pas au format numérique

  • EBADHINTS : l'indicateur d'invite spécifié n'est pas valide

  • ENOTINITIALIZED : la bibliothèque de classes c-ares n'a pas été initialisée été terminé

  • ELOADIPHLPAPI : Une erreur s'est déclenchée lors du chargement de iphlpapi.dll

  • EADDREGETNETWORKPARAMS : fonction GetNetworkParams introuvable

  • ECANCELÉ : Opération de requête DNS annulée

Utilisation de base du module 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' ]
});

Ce qui précède est ce que j'ai compilé pour vous. J'espère qu'il vous sera utile à l'avenir.

Articles connexes :

Connaissances de base et principes de fonctionnement de vue-router

Exemple de post axios soumettant des données de formulaire

Comment utiliser axios dans le composant vue

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn