#!/usr/bin/env python import socket RANGE = (0, 10000) def scan(address, start=0, end=10000, verbose=False): for port in range(int(start), int(end)): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((address, port)) except socket.error, e: if verbose: yield (port, False) else: s.close() if verbose: yield (port, True) else: yield port if __name__ == '__main__': import sys from optparse import OptionParser op = OptionParser() op.set_usage('%s [options] ' % (sys.argv[0],)) op.add_option('-v', '--verbose', dest='verbose', action='store_true', default=False, help='Display all ports scanned') op.add_option('-s', '--start', dest='start', default=0, help='First port scanned, default 0') op.add_option('-e', '--end', dest='end', default=10000, help='Last port scanned, default 10000') op.add_option('-q', '--quiet', dest='quiet', action='store_true', help='Give minimal output, useful for parsing') (options, args) = op.parse_args(sys.argv[1:]) if not args: print op.format_help() sys.exit(1) options = options.__dict__ quiet = options.pop('quiet', False) for addr in args: if quiet: print addr else: print 'scanning', addr for port in scan(addr, **options): if options['verbose']: print '%s: %s' % port else: if quiet: print port else: print 'connected to port', port