HOWTO : Pyrit Cluster with BackTrack 5 R2

Install nVidia CUDA drivers and Pyrit as described here



(A) The server (with the GPUs) Settings



At least run the pyrit once and you will have the following file at ~/.pyrit/config.



default_storage = file://

limit_ncpus = 0

rpc_announce = true

rpc_announce_broadcast = false

rpc_knownclients =

rpc_server = false

workunit_size = 75000




If your system is enabled Hyper-Threading, the "limit_ncpus" should be set to the number of the real CPU cores. For example, my system have 6 real CPU cores and HT is enabled, the setting will be as the following :



limit_ncpus = 6



Bug fix :



nano /usr/local/lib/python2.6/dist-packages/cpyrit/network.py



Locate the following lines :



except socket.error:

   break

if essid != '' or pwbuffer != '':

   pwlist = storage.PAW2_Buffer()

   pwlist.unpack(pwbuffer.data)

   self.client.enqueue(essid, pwlist)

else:

   time.sleep(1)




Change it to :



except socket.error:

   break

if essid != '' or pwbuffer != '':

   pwlist = storage.PAW2_Buffer(pwbuffer.data)

   self.client.enqueue(essid, pwlist)

else:

   time.sleep(1)




Boost the network performance :



nano /usr/local/lib/python2.6/dist-packages/cpyrit/network.py



Locate the following lines :



essid, pwbuffer = \

   self.server.gather(self.client.uuid, 5000)




Change it to :



essid, pwbuffer = \

   self.server.gather(self.client.uuid, 90000)




(B) The client (without or with GPUs) Settings



Client is not required to install nVidia drivers. Just install the BackTrack 5 R2 as is. However, if you client has nvidia display card installed, you should install the nVidia drivers as the captioned mentioned.



The following settings should be set on every client machine.



At least run the pyrit once and you will have the following file at ~/.pyrit/config.



default_storage = file://

limit_ncpus = 0

rpc_announce = true

rpc_announce_broadcast = false

rpc_knownclients = 192.168.0.100

rpc_server = true

workunit_size = 75000




** if you have more than one server, you should set it to (where the IP addresses are the IP address of your servers) :



rpc_knownclients = 192.168.0.100 192.168.0.150



Bug fix :



nano /usr/local/lib/python2.6/dist-packages/cpyrit/network.py



Locate the following lines :



except socket.error:

   break

if essid != '' or pwbuffer != '':

   pwlist = storage.PAW2_Buffer()

   pwlist.unpack(pwbuffer.data)

   self.client.enqueue(essid, pwlist)

else:

   time.sleep(1)




Change it to :



except socket.error:

   break

if essid != '' or pwbuffer != '':

   pwlist = storage.PAW2_Buffer(pwbuffer.data)

   self.client.enqueue(essid, pwlist)

else:

   time.sleep(1)




Boost the network performance :



nano /usr/local/lib/python2.6/dist-packages/cpyrit/network.py



Locate the following lines :



essid, pwbuffer = \

   self.server.gather(self.client.uuid, 5000)




Change it to :



essid, pwbuffer = \

   self.server.gather(self.client.uuid, 90000)




(C) How to run



On the server



pyrit serve



On the client



pyrit benchmark



Remarks :



I have tested this settings on my system with VirtualBox client. The performance of the Pyrit dropped about by half. It is because the VirtualBox client is not on a real network and the CPUs of the VirtualBox client are not real.



By the way, the performance of the cluster will be dropped a lot even in a home gigabit network environment - ThinkPad X100e (AMD CPU with no GPU). I think Pyrit is not very good at network environment at this moment and the CPU power of the client does matter too.



That's all! See you.