From ded8097a03276cfe6f8a242590ccd031a7f20cb6 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Mon, 16 Jan 2017 01:29:38 -0800 Subject: [PATCH] dns: add lookup function. --- lib/net/dns-browser.js | 4 ++++ lib/net/dns.js | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/net/dns-browser.js b/lib/net/dns-browser.js index 1c9c095c..b0b9ee53 100644 --- a/lib/net/dns-browser.js +++ b/lib/net/dns-browser.js @@ -29,3 +29,7 @@ exports.resolve = function resolve(host, proxy) { }); }); }; + +exports.lookup = function lookup(host, proxy) { + return exports.resolve(host, proxy); +}; diff --git a/lib/net/dns.js b/lib/net/dns.js index 7e27a81a..dd47a212 100644 --- a/lib/net/dns.js +++ b/lib/net/dns.js @@ -8,7 +8,13 @@ var dns = require('dns'); -exports.resolve = function resolve(host) { +var options = { + family: 4, + hints: dns.ADDRCONFIG | dns.V4MAPPED, + all: true +}; + +exports.resolve = function resolve(host, proxy) { return new Promise(function(resolve, reject) { dns.resolve(host, 'A', function(err, result) { if (err) { @@ -25,3 +31,29 @@ exports.resolve = function resolve(host) { }); }); }; + +exports.lookup = function lookup(host, proxy) { + return new Promise(function(resolve, reject) { + var addrs = []; + var i, addr; + + dns.lookup(host, options, function(err, result) { + if (err) { + reject(err); + return; + } + + if (result.length === 0) { + reject(new Error('No DNS results.')); + return; + } + + for (i = 0; i < result.length; i++) { + addr = result[i]; + addrs.push(addr.address); + } + + resolve(addrs); + }); + }); +};