jarviscrawlercore
Version:
jarvis crawler core
88 lines (71 loc) • 1.65 kB
JavaScript
const dns = require('dns');
const log = require('./log');
/**
* getHostName - get hostname
* @param {string} url - url
* @return {string} hostname - hostname
*/
function getHostName(url) {
if (url.indexOf('data:') == 0) {
return '';
}
try {
const urlinfo = new URL(url);
return urlinfo.hostname;
} catch (err) {
log.error('getHostName ' + url + ' ' + err);
}
return '';
}
/**
* IPMgr
*/
class IPMgr {
/**
* IPAddress manager
* @constructor
*/
constructor() {
this.maphostname = {};
}
/**
* getIP -
* @param {string} url - url
* @return {Promise<string>} ip - ip address
*/
getIP(url) {
return new Promise((resolve, reject) => {
const curhostname = getHostName(url);
if (curhostname != '') {
if (this.maphostname[curhostname]) {
resolve(this.maphostname[curhostname]);
return;
}
try {
dns.lookup(curhostname, {all: true}, (err, addresses) => {
if (err) {
log.error('getIP.dns.lookup ' + curhostname + ' ' + err);
resolve('');
return;
}
let ip = '';
for (let i = 0; i < addresses.length; ++i) {
if (addresses[i].family == 4) {
ip += addresses[i].address;
ip += ';';
}
}
this.maphostname[curhostname] = ip;
resolve(ip);
});
} catch (err) {
log.error('getIP ' + err);
resolve('');
}
return;
}
resolve('');
});
}
}
exports.IPMgr = IPMgr;