2016-10-12 51 views
0

サーバ - クライアントmd5の解読を試みています サーバは、 cpu) とクライアントが彼の範囲をマルチキャストするために (ブルートフォース) しかし、サーバーは私に "socket.error:[Errno 10048]を投げます。各ソケットアドレス(プロトコル/ネットワークアドレス/ポート) 「許可された」エラー 提案はありますか?socket.error:[Errno 10048]通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の1つの使用しか許可されていません。

クライアント:

import socket 
RANGE=10000 
d="7a2b33c672ce223b2aa5789171ddde2f" 
d=d.lower() 
HOMEADDRES='127.0.0.1' 
PORT=2345 
ADDRESS=(HOMEADDRES,PORT) 

my_socket=socket.socket(socket.AF_INET ,socket.SOCK_STREAM) 
my_socket.connect((HOMEADDRES,PORT)) 



def main(): 
    ranges="" 
    my_socket.send(d) 
    cores=int(my_socket.recv(1024)) 
    borders=[0] 
    for i in range(1,cores+1): 
     borders.append(RANGE*i/cores) 
    for i in range(len(borders)): 
     ranges+=str(borders[i])+"#" 
    ranges=ranges[:-1] 
    print ranges 
    my_socket.send(ranges) 
    print my_socket.recv(1024) 
    my_socket.close() 


if __name__ == '__main__': 
    main() 

サーバー:

import socket 
import multiprocessing 
import hashlib 

IP_ADD='0.0.0.0' 
PORT=2345 
ADDRESS = (IP_ADD,PORT) 
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server_socket.bind(ADDRESS) 
server_socket.listen(1) 
client_socket, address = server_socket.accept() 
print "connected" 

def decrypt(low,high,d): 
    print "1" 
    i=low 
    while i<high: 
     m=hashlib.md5() 
     m.update(str((i))) 
     if m.hexdigest()==d: 
      client_socket.send(i) 
      client_socket.close() 
      server_socket.close() 

     i+=1 

def main(): 
    d=client_socket.recv(1024) 
    client_socket.send(str(multiprocessing.cpu_count())) 
    borders=client_socket.recv(1024) 
    borders=borders.split("#") 
    for i in range(len(borders)-1): 
     p=multiprocessing.Process(target=decrypt, args=(borders[i],borders[i+1],d)) 
     p.start() 
if __name__ == '__main__': 
    main() 
+1

'main()'(サーバーソケットの作成)の外側にあるコードをmainの先頭に移動します。 'main()'がサーバーでどのように呼び出されているかはわかりませんが、クライアントと似ていると思います。 – cdarke

答えて

0

モジュールがインポートされるとすぐに、それが作成され、にバインドされているように、あなたはモジュールスコープでサーバーソケットを作成している(0.0 0.02、2345)。

マルチプロセッシングによって、作成された新しいプロセスでモジュールが(再)インポートされるため、プロセスは直ちにポート2345に同じサーバーソケットを作成しようとしますが、これは不可能です。

私の提案は、モジュールスコープでサーバーソケットを作成するのではなく、main()で行うか、またはマルチプロセッシングのものを独自のモジュールに移動することです。

+0

独自のモジュールとは何ですか? – user4719989

+0

別のスクリプトで記述してインポートする必要がありますか? – user4719989

+0

はい、新しいモジュールf.ex. decryption.pyを作成し、実際の暗号化ロジックをそこに移動します。 –

関連する問題