Просмотр полной версии : Определение адресов почтовых шлюзов.
Народ, вот сталкнулся с одной проблемкой:
Вот смотрите. У меня есть к примеру 2 ящика почтовых.
К примеру:
1) hhhh@mail.ru
2) hhhh@rambler.ru
И вот я к примеру подрубился на SMTP у рамблева. авторизовался и послал письмо на ящик что на маил.ру.
Дык рамблер принял мое письмо. потом он подключится к маил.ру и передаст ему это письмо.
Вот вопрос: куда он подключится для передачи. по какому адресу.
я знаю что он подрубится скорее всего на адрес: mx12.mail.ru (судя по заголовкам передаваемых в письме)
Но у каждого сервера этот адрес разный. Каким образом он знает куда подрубатсья?
Перебрал все RFC так и не нашел. Ведь какимто образом между серверами письма проходят без авторизации...
Как вы поняли всё это нужно для создания спам-бота.
ответ: DNS...
$ telnet someMail.xD 25
Trying...
Connected to someMail.xD.
Escape character is '^]'.
220 mail.someMail.xD ESMTP Sendmail 8.8.0/8.8.0; Wed, 5 May 1999 21:30:42
helo I.am.user
250 mail.someMail.xD Hello crack.spammer.com [1.1.1.1], pleased to meet you
mail from: user@any-name.any-domain.com
250 user@any-name.any-domain.com... Sender ok
quit
221 mail.someMail.xD closing connection
Connection closed.
//заимствованно с prohack.com
Приведенный ниже SMTP-диалог провоцирует dns.someMail.xD на поиск информации о имени any-
name.any-domain.com:...
обычно(чаще всего) сами почтовые сервера называются типа smtp.mail.ru,
pop3.mail.ru...
Вот именно мне интерестно как это делать.
просто когда подрубается на любой сервак типа smtp.mail.ru
и пишешь ему EHLO то он в первой строке ответа отвечает типа 250-mx21.mail.ru
НО по этим адресам невозможно подрубиться.
Просто очень нужно знать как эта система пашет.
Ведь письма идут бес проблем и без всяких напрягов.
т.е. такая фишка с яндексом не катит.
катит тока если подрубатсья на mxfront4.yandex.ru
Внимательно изучи Rfc 821...
Мля я и так прочел и 821 и 822 и 2821 там об этом почти нет ничего
(способ для ленивых, он же универсальный)...если юзаешь Borland C ,Delphi...
можно готовые (стандартные) компоненты изпользовать ( IdSTMPClient , IdDNSReslover и т п... )...там уже весь протокол практически реализован ....
Мля. не вынуждайте матом крыть.
Компоненты вообще не подходят никакие. Мне пофегу как это сделать программно, если надо, то я напишу.
Мне нужен сам принцип работы!
Просто как я уже понял из RFC мне нужно так называемое MX name
Вот как его получить?
просто у яндекса оно приметро такого вида: mxfront (1..8) причем после каждого коннекта оно меняется.
У маил ру - mx (1..хз) и тоже меняется
на рамблере просто mx
Почитай статью в Хакере за 2005 год декабрь, называется "разводим червей", там вроде по русски и даже с сорцами (на Object Pascal'e).
Вот вроде понятно всё написано в rfc2821:
An intermediate host that acts as either an SMTP relay or as a gateway into some other transmission environment is usually selected through the use of the domain name service (DNS) Mail eXchanger mechanism.
Usually, intermediate hosts are determined via the DNS MX record, not by explicit "source" routing (see section 5 and appendices C and F.2).
И вот ещё в wikipedia (http://en.wikipedia.org/wiki/MX_record):
When an e-mail message is sent through the Internet, the sending mail transfer agent makes a DNS query requesting the MX record for the recipient's domain name, which is the portion of the e-mail address following the "@".
Всем огромное спасибо за помошь.
Итог таков. Нужно просто напросто выполнить Dns запрос к мыловскому серваку.
Как я понял. Обычные запросы идут с параметром Ns, а мне нужно с параметром Mx.
Или я не прав?
Вот тока блин ниде не могу найти нормальный исходник как зделать такой запрос.
Просто есть исходник в журнале "Нахер" за декабрь. Но он блин на диске ихнем :(
#include <iostream>
#include <winsock2.h>
#include <windows.h>
#include <windns.h>
#pragma comment (lib, "dnsapi.lib")
#pragma comment (lib, "ws2_32.lib")
int main()
{
PDNS_RECORD ppQueryResultSet;
if (DnsQuery( "mail.ru", DNS_TYPE_MX, DNS_QUERY_STANDARD, NULL, &ppQueryResultSet, NULL)==ERROR_SUCCESS)
MessageBox(0,ppQueryResultSet->Data.MX.pNameExchange,NULL,MB_OK);
return 0;
}
По идее просто
>nslookup
set type=mx
mail.ru
mail.ru MX preference = 10, mail exchanger = mxs.mail.ru
mxs.mail.ru internet address = 194.67.23.20
А так, в принципе, посланное письмо с рамблера, обрабатывается почтовым сервером рамблера, который смотрит, что оно посылается на mail.ru и ищет mx-record для mail.ru на dns серверах. И находит mxs.mail.ru. Так ты получаешь письмо.
Подробней можешь узнать прочитав про dns и внимательно просмотрев свойства письма в Outlook.
Меня как раз и ввели в замещательства свойства письма.
т.к. в служебных заголовках вообще левые адреса были.
Ну а так я просто взял качнул модуль WinDNS.pas и через него сделал запросы. Работает на ура
Наверное да, но у таких крупных сервисов как mail.ru не один почтовый сервер, а больше, и все они имеют разный приоритет. Например 10 - высший, 20 - второй и тд. Если первый сильно занят - письмо обрабатывается вторым.
Что-то не могу додуматься как определить остальные.
Azazel Кстати, я вот попутно находил исходники. Там вообще DNS сервер может возвращать несколько адресов. Вот тока их нужно какимто другим методом считывать все.
Shram-spb
28.06.2007, 16:45
Хм.. Dns адрес получить не проблема.. а вот к какому порту коннектиться и по какому протаколу передавать?? как вообще сэмулировать, что коннектиться не пользователь, а другой почтовый сервер, например яндекс коннектиться к майл.ру.. для них существует какая-то авторизация или нет?
2 Shram-spb коннект на почтовый шлюз идет на обычный smtp порт
и все идет по RFC SMTP тобе без авторизации
Shram-spb
29.06.2007, 01:22
2 Shram-spb коннект на почтовый шлюз идет на обычный smtp порт
и все идет по RFC SMTP тобе без авторизации
Хм.. тогда почему мне не законнектитья на mxs.mail.ru:25??
Наверное да, но у таких крупных сервисов как mail.ru не один почтовый сервер, а больше, и все они имеют разный приоритет. Например 10 - высший, 20 - второй и тд. Если первый сильно занят - письмо обрабатывается вторым.
Что-то не могу додуматься как определить остальные.
Мне всегда оно отдает MX-запись mxs.mail.ru
Скорее всего, просто к этому домену привязан не один адрес, а разные сервера.
>Хм.. тогда почему мне не законнектитья на mxs.mail.ru:25??
никто не знает. видимо ты или твой пров кривые)
MX определяется стандартно как и любая другая запись днс:
DnsQuery_A из dnsapi.dll
if (pDnsQuery_A(domain, DNS_TYPE_MX, DNS_QUERY_STANDARD, NULL, &pQueryResults, NULL) != ERROR_SUCCESS) { // error }
используется структура DNS_RECORD
У меня запросто проходит конект через любого провайдера. даже через мобильлый телефон
Shram-spb
30.06.2007, 18:40
Может я туплю?
shram@shram-laptop:~$ telnet mxs.mail.ru 25
Trying 194.67.23.20...
telnet: Unable to connect to remote host: Connection timed out
shram@shram-laptop:~$
Вроде все нормально делаешь.
Мож у тебя провайдер не дает юзать почтовыые шлюзы?
Shram-spb
30.06.2007, 21:58
Вроде все нормально делаешь.
Мож у тебя провайдер не дает юзать почтовыые шлюзы?
Хм.. а через носок получиться, как думаешь?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot