Если вы только что присоединились к чтению этой статьи, предлагаю заранее ознакомиться с ее
первой частью. Хочу вам напомнить, что перед нами стоит задача создания SMS Bomber’а, который не требовал бы нашего присутствия в Интернет сети. Для того чтобы создать такую систему и при этом обойтись без каких-либо привилегированных функций, было решено зациклить переадресацию электронного сообщения между двумя серверами. В результате, письмо постоянно заставляет срабатывать фильтры на почтовых ящиках, которые в свою очередь отправляют его копию на мобильный телефон. При этом само письмо снова переадресовывается на первый сервер. На данном этапе, нам уже удалось запустить этот механизм в действие. Проблема только в том, что мы не можем влиять на текст отправляемого SMS сообщения. Поэтому, эта часть статьи расскажет о том, как получить контроль над содержимым SMS.
Отвлечемся немного от нашего старого варианта и посмотрим, что еще можно сделать. Для начала устанавливаем фильтры на обоих почтовых ящиках на переадресацию.
Настройки для Mail.Ru:
От не содержит: несуществующий
Переслать копию сообщения на адрес: bomber@rambler.ru
Настройки для Rambler.Ru:
From is not: несуществующий
Forward To: bomber@mail.ru
Таким образом, мы должны избавиться от проблемы с несрабатыванием фильтров из-за того, что после фильтрации адрес отправителя в заголовке может оказаться другим (системным). Но не питайте напрасных иллюзий, в таком виде это работать не будет. Чтобы как-то запустить такую систему необходимо еще что-то, в данном случае можно воспользоваться богатством функциональности фильтров на Rambler.Ru.
Если вы уже производили попытки тестирования настроек из прошлой статьи, вам должна была броситься в глаза возможность добавления своих полей в заголовок письма (опция “Add
Header”).
Что она нам может дать? Первое что приходит в голову – это искажение технической информации о письме. Если такое возможно, то вполне реально окажется что письмо уже не будет блокировано на втором или каким либо другом витке переадресаций. Но об этом немного попозже, а пока могу вам предложить вспомнить о том, каким образом заголовок отличается от самого содержимого письма. Все очень просто, письмо всегда начинается с заголовка. Когда парсер встречает первую пустую строку, то вся нижестоящая информация идентифицируется как тело сообщения. Поэтому, давайте попробуем в фильтре на Rambler.Ru, перед правилом переадресации письма, добавить еще одно – “Add Header”. Содержимое добавляемого поля, пускай будет "X-Test: Position", чтобы сперва проверить позицию куда будет вставлено новое поле. После обработки фильтром, мы получили такое письмо:
1.01 From bomber@rambler.ru Wed Jul 27 11:24:31 2005
1.02 Return-path: <bomber@rambler.ru>
1.03 Received: from [XX.XX.XX.XX] (port=25 helo=mxb.rambler.ru)
1.04 by mx22.mail.ru with esmtp
1.05 id 1DxgHE-0007zz-00
1.06 for bomber@mail.ru; Wed, 27 Jul 2005 11:24:28 +0400
1.07 Received: from rambler.ru (mail2.rambler.ru [XX.XX.XX.XX])
1.08 by mxb.rambler.ru (Postfix) with ESMTP id 1C65684C68
1.09 for <bomber@mail.ru>; Wed, 27 Jul 2005 11:24:49 +0400 (MSD)
1.10 Received: from <bomber@rambler.ru>
1.11 by mail2.rambler.ru (CommuniGate Pro RULES 4.2.10)
1.12 with RULES id 261063370; Wed, 27 Jul 2005 11:24:49 +0400
1.13 X-Autogenerated: Forward
1.14 From: "Tester Testenko - Rambler.Ru" <bomber@rambler.ru>
1.15 To: bomber@mail.ru
1.16 Date: Wed, 27 Jul 2005 11:24:49 +0400
1.17 Message-ID: <redirect-261063370@mail2.rambler.ru>
1.18 X-Test: Position
1.19 X-Original-Return-Path: <bomber@mail.ru>
1.20 Received-SPF: pass (mx8.rambler.ru: domain of mail.ru designates
1.21 XX.XX.XX.XX as permitted sender) client-ip=XX.XX.XX.XX;
1.22 envelope-from=bomber@mail.ru; helo=f22.mail.ru;
1.23 X-Original-From
1.24 : Tester Testenko - Mail.Ru <bomber@mail.ru>
1.25 Subject: FWD:tst
1.26 Mime-Version: 1.0
1.27 X-Mailer: mPOP Web-Mail 2.19
1.28 X-Originating-IP: unknown via proxy [XX.XX.XX.XX]
1.29 X-Original-Date: Wed, 27 Jul 2005 11:24:48 +0400
1.30 X-Original-Reply-To: Tester Testenko - Mail.Ru <bomber@mail.ru>
1.31 Content-Type: text/plain; charset=koi8-r
1.32 Content-Transfer-Encoding: 8bit
1.33 X-Original-Message-Id:
1.34 <E1DxgHY-000ENZ-00.bomber-list-ru@f22.mail.ru>
Это письмо говорит о том, что оно было послано с Rambler.Ru на Mail.Ru, после чего в него было добавлено наше поле (см. 1.18). Значит, поля добавляются в принципе в середину заголовка, а точнее в ту его позицию, в которую на данный момент производится запись технической информации. После следующей проверки, также оказалось, что в заголовок можно добавлять пустую строку, но он обязательно должен начинаться в формате "параметр: значение". Следующим шагом будет попытка розбить заголовок письма, и посмотреть, как сработает система переадресаций. Вместо старого добавляемого поля, устанавливаем следующее:
1.01 X-Header: Break
1.02
1.03 X-Message: Any Text
Отправляем письмо с Rambler.Ru и в результате на Mail.Ru получаем три письма:
1. Собственно говоря, первое письмо это и есть то, что было отправлено.
2. Это письмо, прошедшее два фильтра, с добавленным в него новым полем:
Тело письма (именно тело, а не заголовок!):
1.01 X-Message: Any Text
1.01 Received: from [XX.XX.XX.XX] (HELO mx5.rambler.ru)
1.01 by mail2.rambler.ru (CommuniGate Pro SMTP 4.2.10)
1.01 with ESMTP id 261075668 for bomber@rambler.ru; Wed, 27 Jul 2005 12:21:10
+0400
1.01 Received-SPF: pass (mx5.rambler.ru: domain of list.ru
1.01 designates XX.XX.XX.XX as permitted sender)
1.01 Received: from mx4.mail.ru (fallback.mail.ru [XX.XX.XX.XX])
1.01 by mx5.rambler.ru (Postfix) with ESMTP id E58E522DDE1
1.01 for <bomber@rambler.ru>; Wed, 27 Jul 2005 12:21:09 +0400 (MSD)
1.01 (envelope-from bomber@mail.ru)
1.01 Received: from f48.mail.ru (f48.mail.ru [XX.XX.XX.XX])
1.01 by mx4.mail.ru (mPOP.Fallback_MX) with ESMTP id DD87A3CFBEB
1.01 for <bomber@rambler.ru>; Wed, 27 Jul 2005 12:21:08 +0400 (MSD)
1.01 Received: from mail by f48.mail.ru with local
1.01 id 1Dxh9z-000H1o-00
1.01 for bomber@rambler.ru; Wed, 27 Jul 2005 12:21:03 +0400
1.01 Received: from [XX.XX.XX.XX] by win.mail.ru with HTTP;
1.01 Wed, 27 Jul 2005 12:21:03 +0400
1.01 From: Tester Testenko - Mail.Ru <bomber@mail.ru>
1.01 To: bomber@rambler.ru1.01 Subject: 33331.01 Mime-Version: 1.0
1.01 X-Mailer: mPOP Web-Mail 2.19
1.01 X-Originating-IP: unknown via proxy [XX.XX.XX.XX]
1.01 Date: Wed, 27 Jul 2005 12:21:03 +0400
1.01 Reply-To: Tester Testenko - Mail.Ru <bomber@mail.ru>
1.01 Content-Type: text/plain; charset=koi8-r
1.01 Content-Transfer-Encoding: 8bit
1.01 Message-Id: <E1Dxh9z.000H1o.00.bomber.mail.ru@f48.mail.ru>
Что ж, легко увидеть, что последняя строка, добавленная нами в заголовок, превратилась в первую строку тела письма. Причем в данном случае отправителем считается не bomber@rambler.ru, а bomber@mail.ru; имя получателя не известно, а переадресовано от bomber@rambler.ru.
3. Последнее письмо, пришедшее с Rambler.Ru. В котором говорится, о том что указанное имя отправителя, не соответствует действительности. А если быть более конкретным, то оно отсутствует. Исчезло оно уже во втором письме, потому как в списке входящей корреспонденции, оно не имело ни темы, ни отправителя, ни получателя. И лишь при его открытии, кое какая информация отображалась, и то, кое-как взятая из письма (возможно, что даже из самого тела, поскольку в заголовке она отсутствовала).
Очень интересные результаты, но бесконечное зацикливание все еще не получилось, хотя начало письма уже у нас под контролем. В данном случае не обязательно контролировать тело всего сообщения, поскольку при его отсылке на мобильный телефон, письмо обрезается до N-ного числа символов. Если после текста отправляемого сообщения добавить недостающее количество пробелов, то о вытесненном фрагменте заголовка можно не беспокоиться.
Относительно причин остановки транспортирования письма, все довольно просто. Из-за того, что мы разрываем его заголовок, исчезают необходимые для транспортировки поля: “From”, “To”, а также “Subject”, которое не обязательное. Не стоит делать из этого большой проблемы, поскольку мы добавляем свое поле, то можем втиснуть и другие, которых не хватает:
1.01 From: bomber@rambler.ru
1.02 To: bomber@mail.ru
1.03 Subject: Any Subject
Достаточно приличный результат. Пересылка сообщений действительно замыкается, а значит, система на этот раз уже заработала. Но как всегда появляются другие проблемы, при каждом новом витке переадресаций, размер письма линейно растет. Причина очевидна, после переадресации в каждой точке смены маршрута, сообщению в заголовок (или как получается после фильтрации, в тело сообщения), добавляется техническая информация о маршруте перемещения письма. Казалось бы, в этом нет ничего негативного, но на самом деле такое утверждение очень далеко от истины. Дело в том, что в такой ситуации происходит линейное торможение пересылки сообщения, потому как для передачи письма с большим объемом требуется больше времени. А во-вторых, что самое печальное, когда сообщение достигнет максимально допустимый объем, сервер бесплатной почты, просто откажет в его принятии.
Так или иначе, система работает. Постепенно улучшая ее работу, мы уже добились того, что сообщение действительно пересылается с сервера на сервер. А теперь, еще и получили возможность контроля над его содержимым. Но если в первом случае мы имели замкнутую среду со статическим размером пересылаемого сообщения, то контроль над содержимым письма вызвал регрессивные последствия. При каждой новой его пересылке постепенно растет размер письма, что в свою очередь не гарантирует бесконечности данной процедуры. Поэтому в следующей, завершающей части, мы попытаемся улучшить работу данной системы таким образом, чтобы зафиксировать размер сообщения, и, вдобавок, придадим ей завершенный вид. А что самое главное, сделаем из нее действительно Offline SMS Bomber, такой, чтобы не требовал нашего непосредственного присутствия в сети.
DgtlScrm // dgtlscrm
at real.xakep.ru.NO.SPAM