Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 7, 2014 07:25:17

mark24
От:
Зарегистрирован: 2011-10-22
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка аккаунтов smtp. Прикрутить многопоточность. Как?

На моем корпоротивном почтовом сервере много пользователей. Иногда мне надо проверить их валидность. Некоторые умельцы меняют пароли на более легкие, а это не хорошо. Я экспортирую из БД в txt учетные данные типа логин:пароль[/b. Написал скрипт проверки. Вот он:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
gLogin = []
gPass = []
def hello():
    print 'Enter the file name with the usernames and passwords'
    x = raw_input('File name: ')
    return x
def LoadList(NameFile):
    global gLogin
    global gPass
    f = open(NameFile, 'r')
    for login in f.xreadlines():
        i1 = login.find('@')
        i2 = login.find(':')
        tmpline = login
        login = login[0:i1]
        passw = tmpline[i2+1:len(tmpline)-1]
        gLogin.append(login)
        gPass.append(passw)
def check(lg, pas):
    server = smtplib.SMTP('smtp.corpmail.ru:25')
    server.starttls()
    server.set_debuglevel(1)
    server.login(lg, pas)
    try:
        print 'Acount', lg + '@corpmail.ru  - open access!'
        server.quit()
    except:
        print 'Acount', lg + '@corpmail.ru  - access denied...'
def main():
    global gLogin
    global gPass
    fname = hello()
    LoadList(fname)
    for i in xrange(len(gLogin)):
        check(gLogin[i], gPass[i])
      
    return 0
if __name__ == '__main__':
    main()

Код выполняеться. Но проблема в исключении.
 try:
        print 'Acount', lg + '@corpmail.ru  - open access!'
        server.quit()
 except:
        print 'Acount', lg + '@corpmail.ru  - access denied...'

Если аккаунт верный, то как и положено код в блоке try выполняеться, пишет мне open access!, но как только доходит до аккаунта с неверным паролем, то выполнение прекращаеться.


smtplib.SMTPAuthenticationError: (535, ‘5.7.8 Error: authentication failed: Invalid user or password!’)

Process finished with exit code 1


Вопрос! Почему не выполняеться блок except:? Получаеться исключение но он не выполняеться! Помогите!
Вопрос №2
Скрипт работает долго. Хотелось бы много поточность. Подскажите как это сделать? Просто я ни разу с этим не сталкивался…



Отредактировано mark24 (Фев. 8, 2014 05:18:15)

Офлайн

#2 Фев. 7, 2014 08:52:02

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Проверка аккаунтов smtp. Прикрутить многопоточность. Как?

У вас:

server.login(lg, pas)
не входит в try.

Офлайн

#3 Фев. 7, 2014 15:41:01

mark24
От:
Зарегистрирован: 2011-10-22
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка аккаунтов smtp. Прикрутить многопоточность. Как?

noob_saibot

noob_saibot
У вас:
И то верно, глаз замылися. Ламерская ошибка(((



Офлайн

#4 Фев. 8, 2014 05:36:47

mark24
От:
Зарегистрирован: 2011-10-22
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка аккаунтов smtp. Прикрутить многопоточность. Как?

Явно что-то делаю не так. Вот что написал:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
import threading
import Queue
import time
import sys
gLogin = []
gPass = []
gIndex = 0
def hello():
    print 'Enter the file name with the usernames and passwords'
    x = raw_input('File name: ')
    return x
def LoadList(NameFile):
    global gLogin
    global gPass
    f = open(NameFile, 'r')
    for login in f.xreadlines():
        i1 = login.find('@')
        i2 = login.find(':')
        tmpline = login
        login = login[0:i1]
        passw = tmpline[i2+1:len(tmpline)-1]
        gLogin.append(login)
        gPass.append(passw)
    if len(gLogin) != len(gPass):
        print (len(gLogin)), ' x ', (len(gPass))
        print 'Error! Check whether the input file! The script is stopped ...'
        sys.exit()
def SaveGood(WriteInf):
    f = open('good.txt', 'a')
    f.write(WriteInf)
    f.close()
def check(lg, pas):
    server = smtplib.SMTP('smtp.corpmail.ru:25')
    server.starttls()
    #server.set_debuglevel(1)
    try:
        server.login(lg, pas)
        SaveGood(lg + '@corpmail.ru:' + pas + '\n')
        print 'Acount', lg + '@corpmail.ru  - open access!'
        server.quit()
    except:
        print 'Acount', lg + '@corpmail.ru  - access denied...'
        server.quit()
#############################################################
def processing(thread_num, iq):
    global gIndex
    while True:
        n = iq.get()
        for i in xrange(gIndex):
            check(gLogin[i], gPass[i])
        iq.task_done()
#############################################################
def main():
    global gLogin
    global gPass
    global gIndex
    fname = hello()
    LoadList(fname)
    gIndex = len(gLogin)
#######################################################################
    num_threads = 4
    in_queue = Queue.Queue()
    for i in xrange(200, 300):
        in_queue.put(i)
#######################################################################
    t_start_calc = time.time()
    for i in xrange(num_threads):
        worker = threading.Thread(target=processing, args=(i, in_queue))
        worker.setDaemon(True)
        worker.start()
    in_queue.join()
    #for i in xrange(len(gLogin)):
    #    check(gLogin[i], gPass[i])
    t_end = time.time()
    print 'Operation time - ', t_end - t_start_calc ,' mS'
    return 0
if __name__ == '__main__':
    main()

Но код зацилкиваеться… Терминал хрен остановишь. На проверку одного ака выдает 4. В чем проблема?



Офлайн

#5 Фев. 10, 2014 08:57:19

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Проверка аккаунтов smtp. Прикрутить многопоточность. Как?

Не понял, что это:

mark24
gIndex = len(gLogin)
и
mark24
def processing(thread_num, iq):
    global gIndex
    while True:
        n = iq.get()
        for i in xrange(gIndex):
            check(gLogin[i], gPass[i])
        iq.task_done()

Так же не понял что такое: “На проверку одного ака выдает 4”
Если проблема не в try и не в задании gIndex то предлагаю каждый этап пронумеровать и наглядно увидите, где зацикливается а => и почему

PS: А без Queue работает?

Отредактировано noob_saibot (Фев. 10, 2014 09:01:00)

Офлайн

#6 Фев. 10, 2014 11:53:23

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Проверка аккаунтов smtp. Прикрутить многопоточность. Как?

1. Пароли в корпоративной системе хранятся в открытом виде - facepalm.
2. На счет ускорения посмотрите http://python.su/forum/topic/23291/



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version