From d8f91b9e5445c7cdb03eeb7dd641edf082d3fb40 Mon Sep 17 00:00:00 2001 From: Per Cederqvist <ceder@lysator.liu.se> Date: Mon, 12 Feb 2007 11:08:37 +0000 Subject: [PATCH] Added a configuration file that can list hosts that should have the port open. --- check_no_server | 74 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 7 deletions(-) diff --git a/check_no_server b/check_no_server index 7ffddaa..e496dee 100755 --- a/check_no_server +++ b/check_no_server @@ -2,6 +2,7 @@ import socket import errno +import sys def unknown(hostname, msg): print "UNKNOWN - %s: %s" % (hostname, msg) @@ -19,7 +20,7 @@ def ok(hostname, msg): print "OK - %s: %s" % (hostname, msg) sys.exit(0) -def check_no_server(hostname, port): +def check_no_server(hostname, port, cfg): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(7) try: @@ -27,15 +28,74 @@ def check_no_server(hostname, port): except socket.gaierror, err: warning(hostname, err[1]) except socket.timeout: - ok(hostname, "timeout connecting to server") + if cfg.require(hostname): + critical(hostname, "timeout connecting to server") + else: + ok(hostname, "timeout connecting to server") except socket.error, e: if e[0] == errno.ECONNREFUSED: - ok(hostname, e[1]) + if cfg.require(hostname): + critical(hostname, e[1]) + else: + ok(hostname, e[1]) unknown(hostname, e[1]) - critical(hostname, "connection succeeded") + if cfg.allowed(hostname): + ok(hostname, "connection succeeded") + else: + critical(hostname, "connection succeeded") -if __name__ == '__main__': - import sys +class CfgFile(object): + def __init__(self, fn=None): + self.__allowed = {} + if fn is not None: + for line in file(fn): + if line[0] == "#": + continue + cmd, host, comment = line.split(None, 2) + self.__allowed[host] = cmd + + def allowed(self, host): + return self.__allowed.get(host) in ["allow", "require"] + + def require(self, host): + return self.__allowed.get(host) in ["require"] + +def usage(): + sys.stderr.write("usage: check_no_server -H host -p port [ -c cfgfile ]\n") + sys.stderr.write("or: check_no_server [ -c cfgfile ] host port\n") + sys.exit(1) + +def main(): + import getopt - check_no_server(sys.argv[1], int(sys.argv[2])) + host = None + port = None + cfg = None + + opts, args = getopt.getopt(sys.argv[1:], "H:p:c:", + ["host=", "port=", "cfg="]) + for opt, val in opts: + if opt in ("-H", "--host"): + host = val + elif opt in ("-p", "--port"): + port = int(val) + elif opt in ("-c", "--cfg"): + cfg = val + + if host is None and port is None and len(args) == 2: + host = args[0] + port = int(args[1]) + + if host is None or port is None: + usage() + + if cfg is not None: + cfg_data = CfgFile(cfg) + else: + cfg_data = CfgFile() + + check_no_server(host, port, cfg_data) + +if __name__ == '__main__': + main() -- GitLab