import socket from src import ModuleManager, utils class Module(ModuleManager.BaseModule): _name = "isup" @utils.hook("received.command.isup") @utils.kwarg("help", "Check if a given URL is up or not") @utils.kwarg("usage", "") def isup(self, event): url = None if event["args"]: url = event["args_split"][0] else: match = event["target"].buffer.find(utils.http.REGEX_URL) if match: url = match.match if not url: raise utils.EventError("No URL provided/found.") response = None try: response = utils.http.request(url) except: raise utils.EventError("%s looks down to me" % url) event["stdout"].write("%s looks up to me (HTTP %d)" % (url, response.code)) @utils.hook("received.command.tcpup") @utils.kwarg("min_args", 1) @utils.kwarg("help", "Check if a given hostname:port is up or not") @utils.kwarg("usage", "[:port]") @utils.kwarg("permission", "tcpup") def tcpup(self, event): hostname, _, port = event["args_split"][0].partition(":") port = utils.parse.try_int(port or "80") if port == None: raise utils.EventError("Port must be a number") error = None try: with utils.deadline(seconds=5): socket.create_connection((hostname, port)) except utils.DeadlineExceededException: error = "timed out" except Exception as e: error = str(e) if error == None: event["stdout"].write("%s:%d looks up to me" % (hostname, port)) else: event["stderr"].write("%s:%d looks down to me (%s)" % (hostname, port, error))