Почтовый сервер имитации, инструмент массовой регистрации

рептилия хакер
Почтовый сервер имитации, инструмент массовой регистрации

заниматься вещами

Это ров со стоячей водой отчаяния, и ветерок не может сдуть ни малейшей ряби. В эту эпоху, когда только государственным чиновникам разрешалось поджигать, а людям не разрешалось пользоваться электрическим светом, мы могли бы также взять несколько строк простого кода Python и бросить в эту мертвую воду больше железяк.

Наша цель — сделать Интернет более грязным и вонючим, поэтому мы не связаны правилами. То, что я собираюсь использовать для операции сегодня, это почтовая система.

Спам, от него страдает много людей, но мы не пытаемся этим заниматься сегодня. Думая наоборот, мы не ненавидим его, а приветствуем. Например, я хочу зарегистрироваться массоводесять тысячаккаунт на гитхабе. Github проходит проверку электронной почты, даже если регистрация прошла успешно.На данный момент нам нужен почтовый сервер.Конкретный процесс выглядит следующим образом:

В это время я подумал, не могли бы вы автоматизировать прием электронной почты? Автоматизация включает в себя два момента: 1) Иметь в своем распоряжении бесконечные почтовые ящики 2) Очень легко получить содержимое письма для анализа

Немного подумав, в голову пришел план, который оказался сверхпростым существованием.

в: 1) В кастрированную почтовую систему не нужно логиниться, только получать и отправлять 2) Почтовая система может принимать любую почту с определенным суффиксом 3) Обеспечьте простой интерфейс REST для возврата почты JSON для разбора.

Теперь перейдем непосредственно к теме и поговорим о реализации.

Конфигурация разрешения доменного имени

Откройте управление доменными именами, возьмите в качестве примера Alibaba Cloud, добавьте две части информации

Добавьте запись A, указывающую на IP-адрес службы, которую мы будем развертывать.

A	mx	 6x.216.2xx.1xx

Добавление записи MX, указывающей на адрес доменного имени конфигурации входящей почты выше.

MX	*	mx.sayhiai.com

Уведомление*, что означает, что будут получены все доменные имена, в том числе доменные имена второго уровня и т. д. Например, xxxx@sayhiai.com, xjksfdsf@dfjsdlfjsd.sayhiai.com. Это бесконечно?

Написание SMTPD-сервера

Сервер SMTPD легко реализовать с помощью python, в частности, используяaiosmtpdбиблиотека. Электронные письма по умолчанию кодируются BASE64 и делятся на множество частей и типов, поэтому их сложнее анализировать. Нужно угадать его кодировку и рекурсивно объединить почту и т.д. Фрагмент кода выглядит следующим образом:

def decode_str(s):
    value, charset = decode_header(s)[0]
    if charset:
        value = value.decode(charset)
    return value
def guess_charset(msg):
    charset = msg.get_charset()
    if charset is None:
        content_type = msg.get('Content-Type', '').lower()
        pos = content_type.find('charset=')
        if pos >= 0:
            charset = content_type[pos + 8:].strip()
    return charset
def print_part(msg):
    rs = ""
    content_type = msg.get_content_type()
    if content_type == 'text/plain' or content_type == 'text/html':
        content = msg.get_payload(decode=True)
        charset = guess_charset(msg)
        if charset:
            content = content.decode(charset)
        rs = rs + str(content)
    else:
        rs = rs + str(content_type)
    return rs
def print_info(msg):
    rs = ""
    if (msg.is_multipart()):
        parts = msg.get_payload()
        for n, part in enumerate(parts):
            if part.is_multipart():
                rs = rs + print_info(part)
            else:
                rs = rs + print_part(part)
    else:
        return print_part(msg)
    return rs

Написание REST-сервисов

После разбора письма мы сохраняем содержимое в sqlite3. Следующим шагом является написание интерфейса данных.

Наша цель состоит в том, чтобы облегчить доступ к электронной почте,REST+jsonявляется предпочтительным. питонflaskБиблиотеки, несомненно, самые простые и удобные.

import json
from flask import Flask
from flask import send_file
from data import dataInstance
app = Flask(__name__)
dao = dataInstance
def web_start(host, port):
    app.run(host=host, port=port)
@app.route('/')
def index():
    return send_file('static/index.html')
@app.route('/all')
def msg_all():
    rows = dao.read_all()
    return json.dumps(rows)
@app.route('/from/<addr>')
def msg_from(addr):
    rows = dao.read_from(addr)
    return json.dumps(rows)
@app.route('/to/<addr>')
def msg_to(addr):
    rows = dao.read_to(addr)
    return json.dumps(rows)

Как видите, предусмотрено три интерфейса 1) /all, чтобы получить все электронные письма 2) /from/{addr} найти письма по отправителю 3) /to/{addr} найти письма по получателю

Каждый запрос возвращает более 100 записей, в любом случае, вам больше и не нужно.

попробуй

Зарегистрируйте учетную запись на skdfkdsjf@sayhiai.com. Используйте curl или браузер для получения информации о почте:

curl -XGET http://sayhiai.com:14000/to/skdfkdsjf@sayhiai.com

или использоватьsayhiai.com:14000/Проверьте это онлайн.

Мой слишком медленный, не забудьте собрать его самостоятельно, не забывайте, что порт SMTPD 25, другие невозможно привязать

конец

На данный момент идеальный замкнутый цикл завершен. Я помню, что некоторое время назад некоторые студенты все еще были недовольны приобретением Microsoft github.Пришло время дать вам выход, и обратить внимание на получение еще нескольких IP-адресов.

Посмотрите, вы можете видеть, что даже такой большой сайт, как github, проходит только проверку электронной почты, можно предвидеть, сколько сайтов в Интернете могут использовать ту же идею.

Я выложил код на гитхаб :) :) :).GitHub.com/Li Yuchunying/Shame…

Если ты сделаешь что-то плохое, не оставляй свое имя