From 66c963190d96a1cb86f6883a21a8f587f6d43896 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Wed, 20 Apr 2022 13:45:32 -0600 Subject: [PATCH] misc: add shodan internetdb command --- src/modules/misc.js | 59 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/modules/misc.js b/src/modules/misc.js index f59a5c1..b80ad02 100644 --- a/src/modules/misc.js +++ b/src/modules/misc.js @@ -327,3 +327,62 @@ arsched.callback = async function (msg, line) { }; }; hf.registerCommand(arsched); + +const REGEX_IPV4 = /^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)(\.(?!$)|$)){4}$/; +const shodan = new Command("shodan"); +shodan.category = CATEGORY; +shodan.helpText = "Look up an IP on Shodan InternetDB"; +shodan.callback = async function (msg, line) { + if (!line || line == "") return "Arguments required."; + if (!REGEX_IPV4.test(line)) return "Invalid IP address."; + + const data = await fetch("https://internetdb.shodan.io/" + line).then((res) => + res.json() + ); + + return { + embed: { + title: `Results for \`${data.ip}\``, + fields: [ + { + title: "Hostnames", + value: + data.hostnames.length > 0 + ? data.hostnames.map((str) => `\`${str}\``).join("\n") + : "None", + inline: true, + }, + { + title: "Open ports", + value: data.ports.length > 0 ? data.ports.join(", ") : "None", + inline: true, + }, + { + title: "Tags", + value: + data.tags.length > 0 + ? data.tags.map((str) => `\`${str}\``).join(", ") + : "None", + inline: true, + }, + { + title: "CPEs", + value: + data.cpes.length > 0 + ? data.cpes.map((str) => `\`${str}\``).join("\n") + : "None", + inline: true, + }, + { + title: "Vulnerabilities", + value: + data.vulns.length > 0 + ? data.vulns.map((str) => `\`${str}\``).join("\n") + : "None", + inline: true, + }, + ], + }, + }; +}; +hf.registerCommand(shodan);