peer: add reverse dns lookup.

This commit is contained in:
Christopher Jeffrey 2017-12-20 11:27:42 -08:00
parent 03ddc79dfc
commit d5a2609f75
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
2 changed files with 24 additions and 4 deletions

View File

@ -12,6 +12,7 @@ const EventEmitter = require('events');
const {Lock} = require('bmutex'); const {Lock} = require('bmutex');
const {format} = require('util'); const {format} = require('util');
const tcp = require('btcp'); const tcp = require('btcp');
const dns = require('bdns');
const Logger = require('blgr'); const Logger = require('blgr');
const {RollingFilter} = require('bfilter'); const {RollingFilter} = require('bfilter');
const util = require('../utils/util'); const util = require('../utils/util');
@ -87,6 +88,7 @@ class Peer extends EventEmitter {
this.loader = false; this.loader = false;
this.address = new NetAddress(); this.address = new NetAddress();
this.local = new NetAddress(); this.local = new NetAddress();
this.name = null;
this.connected = false; this.connected = false;
this.destroyed = false; this.destroyed = false;
this.ack = false; this.ack = false;
@ -375,6 +377,24 @@ class Peer extends EventEmitter {
return socket; return socket;
} }
/**
* Do a reverse dns lookup on peer's addr.
* @returns {Promise}
*/
async getName() {
try {
if (!this.name) {
const {host, port} = this.address;
const {hostname} = await dns.lookupService(host, port);
this.name = hostname;
}
} catch (e) {
;
}
return this.name;
}
/** /**
* Open and perform initial handshake (without rejection). * Open and perform initial handshake (without rejection).
* @method * @method

View File

@ -456,23 +456,23 @@ class RPC extends RPCBase {
const peers = []; const peers = [];
for (let peer = this.pool.peers.head(); peer; peer = peer.next) { for (let peer = this.pool.peers.head(); peer; peer = peer.next) {
let offset = this.network.time.known.get(peer.hostname()); const offset = this.network.time.known.get(peer.hostname()) || 0;
const hashes = []; const hashes = [];
if (offset == null)
offset = 0;
for (const hash in peer.blockMap.keys()) { for (const hash in peer.blockMap.keys()) {
const str = util.revHex(hash); const str = util.revHex(hash);
hashes.push(str); hashes.push(str);
} }
peer.getName();
peers.push({ peers.push({
id: peer.id, id: peer.id,
addr: peer.hostname(), addr: peer.hostname(),
addrlocal: !peer.local.isNull() addrlocal: !peer.local.isNull()
? peer.local.hostname ? peer.local.hostname
: undefined, : undefined,
name: peer.name || undefined,
services: hex32(peer.services), services: hex32(peer.services),
relaytxes: !peer.noRelay, relaytxes: !peer.noRelay,
lastsend: peer.lastSend / 1000 | 0, lastsend: peer.lastSend / 1000 | 0,