net: use bdns to resolve ip address.
This commit is contained in:
parent
76c4321448
commit
fcb3a10318
@ -1,29 +0,0 @@
|
|||||||
/*!
|
|
||||||
* external.js - external ip address discovery for bcoin
|
|
||||||
* Copyright (c) 2017, Christopher Jeffrey (MIT License).
|
|
||||||
* https://github.com/bcoin-org/bcoin
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const external = exports;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to retrieve external IP from icanhazip.com.
|
|
||||||
* @method
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
external.getIPv4 = async function getIPv4() {
|
|
||||||
throw new Error('Could not find IP.');
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to retrieve external IP from icanhazip.com.
|
|
||||||
* @method
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
external.getIPv6 = async function getIPv6() {
|
|
||||||
throw new Error('Could not find IP.');
|
|
||||||
};
|
|
||||||
@ -1,95 +0,0 @@
|
|||||||
/*!
|
|
||||||
* external.js - external ip address discovery for bcoin
|
|
||||||
* Copyright (c) 2017, Christopher Jeffrey (MIT License).
|
|
||||||
* https://github.com/bcoin-org/bcoin
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const brq = require('brq');
|
|
||||||
const IP = require('binet');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @exports net/external
|
|
||||||
*/
|
|
||||||
|
|
||||||
const external = exports;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to retrieve external IP from icanhazip.com.
|
|
||||||
* @method
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
external.getIPv4 = async function getIPv4() {
|
|
||||||
try {
|
|
||||||
const res = await brq({
|
|
||||||
method: 'GET',
|
|
||||||
url: 'http://ipv4.icanhazip.com',
|
|
||||||
expect: 'txt',
|
|
||||||
timeout: 2000
|
|
||||||
});
|
|
||||||
|
|
||||||
const str = res.text().trim();
|
|
||||||
const raw = IP.toBuffer(str);
|
|
||||||
|
|
||||||
if (!IP.isIPv4(raw))
|
|
||||||
throw new Error('Could not find IPv4.');
|
|
||||||
|
|
||||||
return IP.toString(raw);
|
|
||||||
} catch (e) {
|
|
||||||
return await external.getIPv42();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to retrieve external IP from dyndns.org.
|
|
||||||
* @method
|
|
||||||
* @ignore
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
external.getIPv42 = async function getIPv42() {
|
|
||||||
const res = await brq({
|
|
||||||
method: 'GET',
|
|
||||||
url: 'http://checkip.dyndns.org',
|
|
||||||
expect: 'html',
|
|
||||||
timeout: 2000
|
|
||||||
});
|
|
||||||
|
|
||||||
const match = /IP Address:\s*([0-9a-f.:]+)/i.exec(res.text());
|
|
||||||
|
|
||||||
if (!match)
|
|
||||||
throw new Error('Could not find IPv4.');
|
|
||||||
|
|
||||||
const str = match[1];
|
|
||||||
const raw = IP.toBuffer(str);
|
|
||||||
|
|
||||||
if (!IP.isIPv4(raw))
|
|
||||||
throw new Error('Could not find IPv4.');
|
|
||||||
|
|
||||||
return IP.toString(raw);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to retrieve external IP from icanhazip.com.
|
|
||||||
* @method
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
|
|
||||||
external.getIPv6 = async function getIPv6() {
|
|
||||||
const res = await brq({
|
|
||||||
method: 'GET',
|
|
||||||
url: 'http://ipv6.icanhazip.com',
|
|
||||||
expect: 'txt',
|
|
||||||
timeout: 2000
|
|
||||||
});
|
|
||||||
|
|
||||||
const str = res.text().trim();
|
|
||||||
const raw = IP.toBuffer(str);
|
|
||||||
|
|
||||||
if (!IP.isIPv6(raw))
|
|
||||||
throw new Error('Could not find IPv6.');
|
|
||||||
|
|
||||||
return IP.toString(raw);
|
|
||||||
};
|
|
||||||
@ -1260,7 +1260,7 @@ HostList.scores = {
|
|||||||
IF: 1,
|
IF: 1,
|
||||||
BIND: 2,
|
BIND: 2,
|
||||||
UPNP: 3,
|
UPNP: 3,
|
||||||
HTTP: 3,
|
DNS: 3,
|
||||||
MANUAL: 4,
|
MANUAL: 4,
|
||||||
MAX: 5
|
MAX: 5
|
||||||
};
|
};
|
||||||
|
|||||||
@ -14,7 +14,6 @@ exports.BIP150 = require('./bip150');
|
|||||||
exports.BIP151 = require('./bip151');
|
exports.BIP151 = require('./bip151');
|
||||||
exports.bip152 = require('./bip152');
|
exports.bip152 = require('./bip152');
|
||||||
exports.common = require('./common');
|
exports.common = require('./common');
|
||||||
exports.external = require('./external');
|
|
||||||
exports.Framer = require('./framer');
|
exports.Framer = require('./framer');
|
||||||
exports.HostList = require('./hostlist');
|
exports.HostList = require('./hostlist');
|
||||||
exports.NetAddress = require('./netaddress');
|
exports.NetAddress = require('./netaddress');
|
||||||
|
|||||||
@ -26,7 +26,6 @@ const BIP151 = require('./bip151');
|
|||||||
const BIP152 = require('./bip152');
|
const BIP152 = require('./bip152');
|
||||||
const Network = require('../protocol/network');
|
const Network = require('../protocol/network');
|
||||||
const Peer = require('./peer');
|
const Peer = require('./peer');
|
||||||
const external = require('./external');
|
|
||||||
const List = require('../utils/list');
|
const List = require('../utils/list');
|
||||||
const HostList = require('./hostlist');
|
const HostList = require('./hostlist');
|
||||||
const InvItem = require('../primitives/invitem');
|
const InvItem = require('../primitives/invitem');
|
||||||
@ -506,7 +505,7 @@ class Pool extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempt to discover external IP via HTTP.
|
* Attempt to discover external IP via DNS.
|
||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -517,7 +516,7 @@ class Pool extends EventEmitter {
|
|||||||
if (!this.options.listen)
|
if (!this.options.listen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Never hit an HTTP server if
|
// Never hit a DNS server if
|
||||||
// we're using an outbound proxy.
|
// we're using an outbound proxy.
|
||||||
if (this.options.proxy)
|
if (this.options.proxy)
|
||||||
return;
|
return;
|
||||||
@ -526,27 +525,29 @@ class Pool extends EventEmitter {
|
|||||||
if (this.hosts.local.size > 0)
|
if (this.hosts.local.size > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let host4;
|
let host4 = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
host4 = await external.getIPv4();
|
host4 = await dns.getIPv4(2000);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.logger.debug('Could not find external IPv4 (http).');
|
this.logger.debug('Could not find external IPv4 (dns).');
|
||||||
this.logger.debug(e);
|
this.logger.debug(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (host4 && this.hosts.addLocal(host4, port, scores.HTTP))
|
if (host4 && this.hosts.addLocal(host4, port, scores.DNS))
|
||||||
this.logger.info('External IPv4 found (http): %s.', host4);
|
this.logger.info('External IPv4 found (dns): %s.', host4);
|
||||||
|
|
||||||
|
let host6 = null;
|
||||||
|
|
||||||
let host6;
|
|
||||||
try {
|
try {
|
||||||
host6 = await external.getIPv6();
|
host6 = await dns.getIPv6(2000);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.logger.debug('Could not find external IPv6 (http).');
|
this.logger.debug('Could not find external IPv6 (dns).');
|
||||||
this.logger.debug(e);
|
this.logger.debug(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (host6 && this.hosts.addLocal(host6, port, scores.HTTP))
|
if (host6 && this.hosts.addLocal(host6, port, scores.DNS))
|
||||||
this.logger.info('External IPv6 found (http): %s.', host6);
|
this.logger.info('External IPv6 found (dns): %s.', host6);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -35,7 +35,6 @@
|
|||||||
"blgr": "^0.0.1",
|
"blgr": "^0.0.1",
|
||||||
"bmutex": "^0.0.1",
|
"bmutex": "^0.0.1",
|
||||||
"bn.js": "^4.11.8",
|
"bn.js": "^4.11.8",
|
||||||
"brq": "^0.0.1",
|
|
||||||
"bsock": "^0.0.1",
|
"bsock": "^0.0.1",
|
||||||
"bsocks": "^0.0.1",
|
"bsocks": "^0.0.1",
|
||||||
"bstring": "^0.0.1",
|
"bstring": "^0.0.1",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user