From: Gunnar Beutner Date: Sun, 8 Jul 2012 09:37:31 +0000 (+0200) Subject: Implemented auto-discovery script. X-Git-Tag: v0.0.1~295 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1c1e1ff5e2e183534e0e95a7e57d3d70e8cd4289;p=icinga2 Implemented auto-discovery script. --- diff --git a/contrib/discover.py b/contrib/discover.py new file mode 100755 index 000000000..5be60caff --- /dev/null +++ b/contrib/discover.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +import sys +import subprocess +import socket +from xml.dom.minidom import parseString + +if len(sys.argv) < 2: + print "Syntax: %s " % (sys.argv[0]) + sys.exit(1) + +proc = subprocess.Popen(["nmap", "-oX", "-", sys.argv[1]], stdout=subprocess.PIPE) +output = proc.communicate() + +dom = parseString(output[0]) + +hostname = sys.argv[1] + +def processHost(host): + for element in host.getElementsByTagName("status"): + if element.getAttribute("state") != "up": + return + + for element in host.getElementsByTagName("address"): + if not element.getAttribute("addrtype") in [ "ipv4", "ipv6" ]: + continue + + address = element.getAttribute("addr") + break + + hostname = address + + for element in host.getElementsByTagName("hostname"): + hostname = element.getAttribute("name") + + print "object host \"%s\" {" % (hostname) + print "\tmacros = {" + print "\t\taddress = \"%s\"" % (address) + print "\t}," + print "" + print "\tservices += { \"ping\" }," + + for element in host.getElementsByTagName("port"): + port = int(element.getAttribute("portid")) + + try: + serv = socket.getservbyport(port, "tcp") + except: + serv = str(port) + + print "" + print "\tservices[\"%s\"] = {" % (serv) + print "\t\tservice = \"tcp\"," + print "" + print "\t\tmacros = {" + print "\t\t\tport = %s" % (port) + print "\t\t}" + print "\t}," + + print "}" + print "" + +for host in dom.getElementsByTagName("host"): + processHost(host)