#! /usr/bin/env python #-*- coding: utf-8 -*- import os import sys import time import socket import thread import threading import optparse OPEN = 'o' CLOSE = 'x' def check_port(host, port): soc = socket.socket() soc.settimeout(1) try: soc.connect((host, port)) except (socket.timeout, socket.error): return CLOSE else: return OPEN class Connector(threading.Thread): def __init__(self, host, port, *args, **kwds): threading.Thread.__init__(self, *args, **kwds) self.setDaemon(True) self.host = host self.port = int(port) def run(self): status = check_port(self.host, self.port) sys.stdout.write('{0} {1}'.format(status, self.port) + os.linesep) def str2ints(word): matching = re.match('^(?P\d+)\-(?P \d+)$', word) if matching: start = int(matching.group('start')) end = int(matching.group('end')) + 1 return range(start, end) else: try: return [int(word)] except (TypeError, ValueError), err: raise TypeError('{0}: {1}'.format(err, word)) def main(): parser = optparse.OptionParser() opts, args = parser.parse_args() length = len(args) ports = [] if length < 1: parser.error('invalid parameter.') elif length == 1: ports += range(1025) # well-known else: for port in args[1:]: if port.lower() == 'well-known': ports += range(1025) else: try: ports += str2ints(port) except TypeError, err: parser.error(err) host = args[0] ports = sorted(list(set(ports))) for port in ports: worker = Connector(host, port) worker.start() while not time.sleep(2): if threading.activeCount() <= 1: break else: sys.stdout.flush() if __name__ == '__main__': main()
2011年11月6日日曜日
ポートスキャン TCP
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿