initial commit master
authorRuss Handorf <rhandorf@handorf.org>
Sat, 27 Jan 2018 16:31:33 +0000 (11:31 -0500)
committerRuss Handorf <rhandorf@handorf.org>
Sat, 27 Jan 2018 16:31:33 +0000 (11:31 -0500)
scanner.py [new file with mode: 0755]

diff --git a/scanner.py b/scanner.py
new file mode 100755 (executable)
index 0000000..a760508
--- /dev/null
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+
+import time
+import argparse
+import ipcalc
+from socket import *
+import ssl
+import M2Crypto
+import OpenSSL
+import csv
+import sys
+import threading
+
+subnet=""
+ports=""
+host=""
+
+parser = argparse.ArgumentParser(prog='Scanner.')
+parser.add_argument('-s', action="store", help='subnet')
+parser.add_argument('-host', action="store", help='host')
+parser.add_argument('-p', action="store", help='ports')
+
+args = parser.parse_args()
+if len(sys.argv[1:])==0:
+       print "Choose a -s or -host"
+       print "-s for subnet"
+       print "-host for single host"
+       print "-p for ports"
+       exit()
+
+subnet=args.s
+host=args.host
+ports=args.p.split(",")
+
+setdefaulttimeout(3)
+
+threads = []
+maxcount=256
+counter=0
+threadcount=0
+
+def scanner(host,port):
+       global threadcount
+       global writer
+       threadcount += 1
+       try:
+               cert = ssl.get_server_certificate((str(host), int(port)))
+               x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
+               writer.writerow({'HOST': str(host), 'PORT': str(port), 'EXPIRED': format(x509.has_expired()), 'VALID FROM': format(x509.get_notBefore()), 'VALID UNTIL': format(x509.get_notAfter())})
+       except (error, timeout) as err:
+               a=error
+       threadcount -= 1
+
+with open('hosts.csv', 'w') as hostfile:
+       fieldnames = ['HOST', 'PORT', 'EXPIRED', 'VALID FROM', 'VALID UNTIL']
+       writer = csv.DictWriter(hostfile, fieldnames=fieldnames)
+       writer.writeheader()
+
+       if subnet != None:
+               for host in ipcalc.Network(subnet):
+                       for port in ports:
+                               if counter<maxcount:
+                                       t = threading.Thread(target=scanner, args=(host,port,))
+                                       threads.append(t)
+                                       t.start()
+                                       counter += 1
+                               else:
+                                       counter=0
+                                       time.sleep(5)
+       else:
+               for port in ports:
+                       if counter<maxcount:
+                               t = threading.Thread(target=scanner, args=(host,port,))
+                               threads.append(t)
+                               t.start()
+                               counter += 1
+                       else:
+                               counter=0
+                               time.sleep(5)
+
+       while (t.isAlive()):
+               print "waiting for %d threads to end" % threadcount
+               time.sleep(1)