URI: 
       tportscan.py - scripts - random scripts
  HTML git clone git://parazyd.org/scripts.git
   DIR Log
   DIR Files
   DIR Refs
       ---
       tportscan.py (2244B)
       ---
            1 #!/usr/bin/env python
            2 
            3 import socket
            4 import sys
            5 import threading
            6 import time
            7 
            8 class counter():
            9     def __init__(self):
           10         self.lock = threading.Lock()
           11         self.port = 0
           12 
           13     def nextport(self):
           14         self.lock.acquire()
           15         if self.port >= 0:
           16             self.port += 1
           17             if self.port >= 65536:
           18                 self.port = -1
           19         port = self.port
           20         self.lock.release()
           21         return port
           22 
           23 class scanner(threading.Thread):
           24     tlist = []
           25     pc = counter()
           26 
           27     def __init__(self):
           28         threading.Thread.__init__(self)
           29         self.port = scanner.pc.nextport()
           30 
           31     def run(self):
           32         while (self.port > 0):
           33             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
           34             s.setblocking(0)
           35             try:
           36                 print("(*) opening conn to %s:%s\r" % (host, self.port))
           37                 s.connect((host, self.port))
           38             except socket.error, e:
           39                 if e[0] != 155:
           40                     raise
           41 
           42             try:
           43                 time.sleep(timo)
           44                 s.send("")
           45                 s.shutdown(socket.SHUT_RDWR)
           46                 print("- port %s is open" % (self.port))
           47             except socket.error:
           48                 #print("- port %s is probably closed" % (self.port))
           49                 pass
           50             finally:
           51                 s.close()
           52             self.port = scanner.pc.nextport()
           53 
           54     def main():
           55         global host, timo
           56 
           57         if len(sys.argv) < 2:
           58             print("usage: portscan.py [host] [maxthreads] [timeout]")
           59             print("scans a host's TCP ports with conn attempts with a given")
           60             print("response timeout (default 1s).")
           61             sys.exit(1)
           62 
           63         host = sys.argv[1]
           64         maxt = int(sys.argv[2]) if len(sys.argv) > 2 else 666
           65         timo = int(sys.argv[3]) if len(sys.argv) > 3 else 1
           66         start = time.time()
           67 
           68         print("(*) port scanning %s, %s ports at a time, timeout %s seconds" % (host, maxt, timo))
           69 
           70         for i in range(0, maxt):
           71             sc = scanner()
           72             scanner.tlist.append(sc)
           73             sc.start()
           74         for sc in scanner.tlist:
           75             sc.join()
           76 
           77         print("(*) scan completed in %s seconds!" % (time.time() - start))
           78 
           79     if __name__=="__main__":
           80         main()
           81