]> granicus.if.org Git - icinga2/commitdiff
Implemented auto-discovery script.
authorGunnar Beutner <gunnar@beutner.name>
Sun, 8 Jul 2012 09:37:31 +0000 (11:37 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Sun, 8 Jul 2012 09:37:31 +0000 (11:37 +0200)
contrib/discover.py [new file with mode: 0755]

diff --git a/contrib/discover.py b/contrib/discover.py
new file mode 100755 (executable)
index 0000000..5be60ca
--- /dev/null
@@ -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 <host>" % (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)