06.12Сканер портов
Давно ничего не писал, совсем разленился, да и писать не о чём. Зашёл тут недавно глупый спор о скорости работы сокетов на perl и python, пришлось написать простой многопоточный скриптик. Пригодится может кому, для изучения python. В результате мой метод оказался хитрее и быстрей
# coding:utf-8 # author: Rushter # site: http://rushter.com import socket,Queue,threading from time import time queue = Queue.Queue() HOST = "localhost" COUNT = 1000 THREADS=100 TIMEOUT = 0.01 def worker(): global queue while True: try: target = queue.get_nowait() except Queue.Empty: return check(target) def check(port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(TIMEOUT) try: sock.connect((HOST, port)) except: return print port sock.close() def main(): t1 = time() for i in xrange(COUNT): queue.put(i) for _ in xrange(THREADS): thread_ = threading.Thread(target=worker) thread_.start() while threading.active_count() >1: pass t2 = time() print t2-t1 main()

