PDA

Просмотр полной версии : Определение адресов почтовых шлюзов.


slesh
08.06.2007, 13:45
Народ, вот сталкнулся с одной проблемкой:
Вот смотрите. У меня есть к примеру 2 ящика почтовых.
К примеру:
1) hhhh@mail.ru
2) hhhh@rambler.ru

И вот я к примеру подрубился на SMTP у рамблева. авторизовался и послал письмо на ящик что на маил.ру.
Дык рамблер принял мое письмо. потом он подключится к маил.ру и передаст ему это письмо.
Вот вопрос: куда он подключится для передачи. по какому адресу.
я знаю что он подрубится скорее всего на адрес: mx12.mail.ru (судя по заголовкам передаваемых в письме)
Но у каждого сервера этот адрес разный. Каким образом он знает куда подрубатсья?
Перебрал все RFC так и не нашел. Ведь какимто образом между серверами письма проходят без авторизации...
Как вы поняли всё это нужно для создания спам-бота.

Jes
08.06.2007, 15:09
ответ: 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...

slesh
08.06.2007, 15:57
Вот именно мне интерестно как это делать.
просто когда подрубается на любой сервак типа smtp.mail.ru
и пишешь ему EHLO то он в первой строке ответа отвечает типа 250-mx21.mail.ru
НО по этим адресам невозможно подрубиться.
Просто очень нужно знать как эта система пашет.
Ведь письма идут бес проблем и без всяких напрягов.

slesh
08.06.2007, 16:00
т.е. такая фишка с яндексом не катит.
катит тока если подрубатсья на mxfront4.yandex.ru

NetMan
08.06.2007, 16:10
Внимательно изучи Rfc 821...

slesh
08.06.2007, 16:20
Мля я и так прочел и 821 и 822 и 2821 там об этом почти нет ничего

Jes
08.06.2007, 16:23
(способ для ленивых, он же универсальный)...если юзаешь Borland C ,Delphi...
можно готовые (стандартные) компоненты изпользовать ( IdSTMPClient , IdDNSReslover и т п... )...там уже весь протокол практически реализован ....

slesh
08.06.2007, 16:40
Мля. не вынуждайте матом крыть.
Компоненты вообще не подходят никакие. Мне пофегу как это сделать программно, если надо, то я напишу.
Мне нужен сам принцип работы!

slesh
08.06.2007, 17:05
Просто как я уже понял из RFC мне нужно так называемое MX name
Вот как его получить?
просто у яндекса оно приметро такого вида: mxfront (1..8) причем после каждого коннекта оно меняется.
У маил ру - mx (1..хз) и тоже меняется
на рамблере просто mx

А®ТеS
08.06.2007, 17:17
Почитай статью в Хакере за 2005 год декабрь, называется "разводим червей", там вроде по русски и даже с сорцами (на Object Pascal'e).

NetMan
08.06.2007, 17:52
Вот вроде понятно всё написано в 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 "@".

slesh
08.06.2007, 18:40
Всем огромное спасибо за помошь.
Итог таков. Нужно просто напросто выполнить Dns запрос к мыловскому серваку.
Как я понял. Обычные запросы идут с параметром Ns, а мне нужно с параметром Mx.
Или я не прав?
Вот тока блин ниде не могу найти нормальный исходник как зделать такой запрос.
Просто есть исходник в журнале "Нахер" за декабрь. Но он блин на диске ихнем :(

NetMan
08.06.2007, 18:58
#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;
}

slesh
08.06.2007, 23:07
2 NetMan Спасибо +

Azazel
08.06.2007, 23:11
По идее просто

>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.

slesh
08.06.2007, 23:23
Меня как раз и ввели в замещательства свойства письма.
т.к. в служебных заголовках вообще левые адреса были.

Ну а так я просто взял качнул модуль WinDNS.pas и через него сделал запросы. Работает на ура

Azazel
08.06.2007, 23:41
Наверное да, но у таких крупных сервисов как mail.ru не один почтовый сервер, а больше, и все они имеют разный приоритет. Например 10 - высший, 20 - второй и тд. Если первый сильно занят - письмо обрабатывается вторым.
Что-то не могу додуматься как определить остальные.

slesh
09.06.2007, 00:10
Azazel Кстати, я вот попутно находил исходники. Там вообще DNS сервер может возвращать несколько адресов. Вот тока их нужно какимто другим методом считывать все.

Shram-spb
28.06.2007, 16:45
Хм.. Dns адрес получить не проблема.. а вот к какому порту коннектиться и по какому протаколу передавать?? как вообще сэмулировать, что коннектиться не пользователь, а другой почтовый сервер, например яндекс коннектиться к майл.ру.. для них существует какая-то авторизация или нет?

slesh
28.06.2007, 20:25
2 Shram-spb коннект на почтовый шлюз идет на обычный smtp порт
и все идет по RFC SMTP тобе без авторизации

Shram-spb
29.06.2007, 01:22
2 Shram-spb коннект на почтовый шлюз идет на обычный smtp порт
и все идет по RFC SMTP тобе без авторизации
Хм.. тогда почему мне не законнектитья на mxs.mail.ru:25??

_Great_
29.06.2007, 10:40
Наверное да, но у таких крупных сервисов как mail.ru не один почтовый сервер, а больше, и все они имеют разный приоритет. Например 10 - высший, 20 - второй и тд. Если первый сильно занят - письмо обрабатывается вторым.
Что-то не могу додуматься как определить остальные.
Мне всегда оно отдает MX-запись mxs.mail.ru
Скорее всего, просто к этому домену привязан не один адрес, а разные сервера.

KEZ
29.06.2007, 12:01
>Хм.. тогда почему мне не законнектитья на 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

slesh
29.06.2007, 23:57
У меня запросто проходит конект через любого провайдера. даже через мобильлый телефон

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:~$

slesh
30.06.2007, 21:04
Вроде все нормально делаешь.
Мож у тебя провайдер не дает юзать почтовыые шлюзы?

Shram-spb
30.06.2007, 21:58
Вроде все нормально делаешь.
Мож у тебя провайдер не дает юзать почтовыые шлюзы?
Хм.. а через носок получиться, как думаешь?