From 3e333a9538cbc01f31290e33bbfebf6b5fed6d04 Mon Sep 17 00:00:00 2001 From: Klaus-Uwe Mitterer Date: Tue, 26 Jul 2016 13:28:02 +0200 Subject: [PATCH] Implement port monitoring, improve punycode handling, other minor improvements --- servertools/__init__.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/servertools/__init__.py b/servertools/__init__.py index e8cc353..9a7b6c9 100644 --- a/servertools/__init__.py +++ b/servertools/__init__.py @@ -1,4 +1,4 @@ -import datetime, encodings.idna, os, setuptools, socketserver, ssltools, sys, syslog, threading +import datetime, encodings.idna, os, porttools, setuptools, socket, socketserver, ssltools, sys, syslog, threading SYSLOG = 0 STDOUT = 1 @@ -34,10 +34,12 @@ def logger(message, prio=syslog.LOG_INFO, sink=logging): logger(message, prio, logging) def listIncluded(host, section): - for i in setuptools.getListSetting("SSL" if section == SSL else "Ports", "hosts"): - if encodings.idna.ToASCII(i[0].lower()).decode("UTF-8") == encodings.idna.ToASCII(host.lower()).decode("UTF-8"): - return True - return False + if not setuptools.getListSetting("Server", "ignorelist"): + for i in setuptools.getListSetting("SSL" if section == SSL else "Ports", "hosts"): + if encodings.idna.ToASCII(i[0].lower()).decode("UTF-8") == encodings.idna.ToASCII(host.lower()).decode("UTF-8"): + return True + return False + return True class TCPHandler(socketserver.StreamRequestHandler): def readString(self): @@ -53,8 +55,11 @@ class TCPHandler(socketserver.StreamRequestHandler): content = message.split() command = content[0].lower() try: - if command in ("hi"): - return "HI: Kumi Status v0.8.15 (KSP)" + if command == "hi": + try: + return "HI: Kumi Status v0.8.15 (KSP) at %s" % setuptools.getSetting("Server", "host") or socket.gethostname() + except Exception as e: + print(e) elif command in ("heartbeat", "hb", "ping"): return "OK: Still here? Wow." elif command in ("stat", "status"): @@ -85,7 +90,15 @@ class TCPHandler(socketserver.StreamRequestHandler): print(e) return "ER: Could not verify SSL certificate on %s:%i. Is the server down?" % (content[1], int(content[2])) elif command == "port": - return "UA: Not currently implemented." + host = encodings.idna.ToASCII(str(content[1])).decode("UTF-8") + port = int(content[2]) + if listIncluded(host, PORT): + if porttools.isPortOpen(host, port): + return "OK: Port %i is open on %s." % (port, content[1]) + else: + return "ER: Port %i is not open on %s." % (port, content[1]) + else: + return "NM: %s is not being monitored!" % content[1] elif command in ("req", "request"): return "NI: Requesting monitoring is not yet implemented." elif command == "help":