-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplugin.js
More file actions
61 lines (50 loc) · 1.52 KB
/
plugin.js
File metadata and controls
61 lines (50 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"use strict";
const Shadow = require('shadowbot-core').Interface;
const Drawing = require('shadowbot-core').Drawing;
const PluginBase = require('shadowbot-plugin-base');
const dns = require('native-dns');
class DNS extends PluginBase {
constructor() {
super();
this.command("dns", [
"This tool is used to check whois data on remote hosts.",
[
['<host>', 'query dns data'],
['[type]', 'query type (default: A)']
]
], this._cmdDNS.bind(this));
}
_cmdDNS(message, reply) {
var host = message.getCommandArgument(0, "");
var type = message.getCommandArgument(1, "A");
this._queryDNS(host, type).then(answers => {
let addresses = [];
for(let answer of answers)
addresses.push(answer.address ? answer.address : JSON.stringify(answer));
reply(`Addresses: ${addresses.join(", ")}`);
}).catch(err => reply(`Couldn't get DNS details: ${err}`));
}
_queryDNS(name, type) {
var question = dns.Question({name, type});
var request = dns.Request({
timeout: 1000,
question: question,
server: {
address: "8.8.8.8",
port: 53,
type: "udp"
}
});
return new Promise((resolve, reject) => {
var answers = [];
request.on('message', (e, a) => {
if(e || !a || !a.answer) return;
a.answer.forEach(answer => answers.push(answer));
});
request.on('end', () => resolve(answers));
request.on('error', reject);
request.send();
});
}
}
module.exports = DNS;