1+ # Script Name : portscanner.py
2+ # Author : Craig Richards
3+ # Created : 20 May 2013
4+ # Last Modified :
5+ # Version : 1.0
6+
7+ # Modifications :
8+
9+ # Description : Port Scanner, you just pass the host and the ports
10+
11+ import optparse # Import the module
12+ from socket import * # Import the module
13+ from threading import * # Import the module
14+
15+ screenLock = Semaphore (value = 1 ) # Prevent other threads from preceeding
16+
17+ def connScan (tgtHost , tgtPort ): # Start of the function
18+ try :
19+ connSkt = socket (AF_INET , SOCK_STREAM ) # Open a socket
20+ connSkt .connect ((tgtHost , tgtPort ))
21+ connSkt .send ('' )
22+ results = connSkt .recv (100 )
23+ screenLock .acquire () # Acquire the lock
24+ print '[+] %d/tcp open' % tgtPort
25+ print '[+] ' + str (results )
26+ except :
27+ screenLock .acquire ()
28+ print '[-] %d/tcp closed ' % tgtPort
29+ finally :
30+ screenLock .release ()
31+ connSkt .close ()
32+
33+ def portScan (tgtHost , tgtPorts ): # Start of the function
34+ try :
35+ tgtIP = gethostbyname (tgtHost ) # Get the IP from the hostname
36+ except :
37+ print "[-] Cannot resolve '%s': Unknown host" % tgtHost
38+ return
39+ try :
40+ tgtName = gethostbyaddr (tgtIP ) # Get hostname from IP
41+ print '\n [+] Scan Results for: ' + tgtName [0 ]
42+ except :
43+ print '\n [+] Scan Results for: ' + tgtIP
44+ setdefaulttimeout (1 )
45+ for tgtPort in tgtPorts : # Scan host and ports
46+ t = Thread (target = connScan , args = (tgtHost , int (tgtPort )))
47+ t .start ()
48+
49+ def main ():
50+ parser = optparse .OptionParser ('usage %prog -H' + ' <target host> -p <target port>' )
51+ parser .add_option ('-H' , dest = 'tgtHost' , type = 'string' , help = 'specify target host' )
52+ parser .add_option ('-p' , dest = 'tgtPort' ,type = 'string' , help = 'specify target port[s] seperated by a comma' )
53+ (options , args ) = parser .parse_args ()
54+ tgtHost = options .tgtHost
55+ tgtPorts = str (options .tgtPort ).split (',' )
56+ if (tgtHost == None ) | (tgtPorts [0 ] == None ):
57+ print parser .usage
58+ exit (0 )
59+ portScan (tgtHost , tgtPorts )
60+ if __name__ == '__main__' :
61+ main ()
0 commit comments