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