Мылим по новой! Расширяем возможности smtplib

Добрый вечер, Господа и Дамы! Сегодня  впервые за всё существование блога пишу о чем-то из своих свежих злодеяний, а не пересказываю давно минувшие битвы.

Черней моей шляпы только твои помыслы, так что сегодня мы будем рассылать спам, для получения дешевых лоадов  веселья. Самым простым вариантом является использование Python’а и стандартной библиотеки smtplib.

Погуглив “mass mailer python“, я обнаружил такой код:

Казалось бы – ничего сложного, но после 30 отправленных писем сервер принудительно разорвал коннект! Не велика проблема, подумал auth0r, и прикрутил пачку аккаунтов. Ушла пара сотен писем и мой ip забанил почтовый сервер.

Ок, давайте прикрутим прокси, опять нас выручает гугл:

Очень хорошо. Но прокси ставится на пакет целиком, а значит сколько бы я не создал потоков – все они будут слать с одного адреса. Непорядок!

Погуглив ещё немного, понял что готового решения нет и придётся покопаться в кишках smtplib, дабы он обрел новые способности к прокси.

Здесь можно скачать архив с этими файлами.

Предположим, что кто-то не знаком с принципом работы socks-прокси. Он крайне прост: мы отправляем управляющую последовательность байт по адресу прокси сервера, в которой говорим с кем нужно создать соединение, после чего шлём все данные на адрес прокси, он пересылает их целевому серверу, читает от него ответ и отправляет его нам.

Для проксификации любого приложения надо найти в нём место, в котором сокет устанавливает коннект. В этом месте мы внесём небольшую правку, чтобы вернуть коду сокет прокси сервера, а не целевого!

Итак, просмотрев класс SMTP в файле “C:\Python27\Lib\smtplib.py” можно заметить, что он вызывает функцию _get_socket, попался! Мы воспользуемся готовым классом SocksiPy, который наследует стандартный класс socket, добавляя к нему возможность проксификации.

Делать правки непосредственно в коде пайтоновской библиотеки некрасиво, поэтому мы просто наследуем класс smtp с нужными модификациями:

Код этих функций скопирован из оригинального класса, внесённые правки я отметил комментариями. Теперь конструктор класса принимает параметр proxy, и каждый новый объект smptlib_proxy работает со своего собственного ip адреса! Ок, сохраняем модуль и попробуем отправить письмецо через Tor:

Через пару минут видим письмецо в inbox‘е:

avps

Благодарю за внимание!

Поддержать ретвитом можно здесь.

Github версия здесь.

14 thoughts on “Мылим по новой! Расширяем возможности smtplib

  1. Очень интересно, спасибо. Но возник один вопрос. Tor может работать как socks без танцев с бубном? Я пытался законектиться через него, но ничего не получалось. Насколько я понимаю, tor как то сконфигурировать надо перед работой?

Добавить комментарий