Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Протокол MRIM'a (Mail-Agent)
 
 автор: Poison   (03.08.2007 в 10:24)   письмо автору
 
 

Вот решил заняться изучение протокола=) Начал писать свой класс для работы с ним.
Пока класс может вывести бота в онлайн и висеть там...=) на этом мои знания и набранная информация кончились...

Может кто видел или сам знает полезную инфу по протоколу.?

Может есть хороший снифер?

Приведу ссылки что я накопал:

http://agent.mail.ru/developers/protocol.html - Официальная инфа (в основном описание работы)

http://forum.antichat.ru/printthread.php?t=38069 - Более интересно.

   
 
 автор: winflip   (03.08.2007 в 10:54)   письмо автору
 
   для: Poison   (03.08.2007 в 10:24)
 

Классная статья только помоги а то я perle не разбераюсь


#!/usr/bin/perl

use strict;
use warnings;
use IO::Socket::INET;


## config ## 
    
my $login    = 'anti@mail.ru';    ## логин меняю на свой я
my $password    = 'rvevre';        ## пасс тоже меняю но не работает
my $user_agent    = 'mrim.pl';        ## описание агента


## constants ## ниже вставь константы из первой врезки с кодом
my $CS_MAGIC        = 0xDEADBEEF;    ## Клиентский Magic
my $PROTO_VERSION    = 0x1000A;    ## Версия протокола

my $MRIM_CS_HELLO     = 0x1001;    ## C->S, empty   
my $MRIM_CS_HELLO_ACK     = 0x1002;    ## S->C, UL mrim_connection_params_t

my $MRIM_CS_LOGIN2      = 0x1038;    ## C->S, LPS login, LPS password, UL status, LPS uagent
my $MRIM_CS_LOGIN_ACK     = 0x1004;    ## S->C, empty
my $MRIM_CS_LOGIN_REJ     = 0x1005;    ## S->C, LPS reason

my $MRIM_CS_PING     = 0x1006;    ## C->S, empty

my $MRIM_CS_USER_STATUS    = 0x100F;    ## S->C, UL status, LPS user
   my $STATUS_ONLINE    = 0x00000001;
    
my $MRIM_CS_MESSAGE     = 0x1008;    ## S->C, UL flags, LPS to, LPS message, LPS rtf-message
   my $MESSAGE_FLAG_NORECV = 0x00000004;

    
##  vars  ##
    
my $seq_real     = 0;            ## счетчик комманд
my $ping_period = 30;            ## интервал для пинга
my $status    = $STATUS_ONLINE;    ## статус


##  main  ##

my ($host, $port) = get_host_port();    ## берем хост:порт
print "[~] connecting to $host:$port..\n";

my $sock = new IO::Socket::INET        ## коннектимся
        (
               PeerAddr  => $host,
            PeerPort  => $port,
               PeerProto => 'tcp',
            TimeOut   => 10
        );


hello();            ## хеллоу и ..
login();            ## логинимся
sleep $ping_period;        ## просто повисим в онлайне с полминуты
ping();                ## пинг
message('matrix@bk.ru', 'There is no spoon, Neo..');
                ## отправляем сообщение на matrix@bk.ru
sleep $ping_period;        ## продолжаем еще некоторое время на-
ping();                ## ходиться в онлайне
sleep 10;
    
##  subs  ## а ниже добавь все сабы, которые присутствовали в статье

sub get_host_port
{
    my $sock1 = new IO::Socket::INET 
    (
        PeerAddr  => 'mrim.mail.ru',
        PeerPort  => 2042,        ## как вариант можно использовать 443
        PeerProto => 'tcp', 
        TimeOut   => 10
    );

    sysread ($sock1, my $answ, 18);
    close $sock1;
    chomp $answ;
       return split /:/,  $answ;    
}

sub hello
{
    print $sock make_mrim_packet($MRIM_CS_HELLO);
    sysread ($sock, my $ack, 48);    ## принимаем 48 байт (44 - хидер, 4 - данные)
    my ($magic, $proto, $seq, $msg, $dlen, $from, $fromport, $r1, $r2, $r3, $r4, $data) = unpack ("L12", $ack);
    $ping_period = $data;        ## получаем значение ping_period
    $seq_real++;            ## $seq_real - это в моем коде счетчик seq
    print "[+] connected..\n" if $data;
}

sub ping
{
    print $sock make_mrim_packet($MRIM_CS_PING);
    $seq_real++;
}

sub login
{
    my $data = pack ("L", length($login)) . $login .    ## упаковываем LPS-данные 
           pack ("L", length($password)) . $password . 
           pack ("L", $status) .            ## а вот так UL
           pack ("L", length($user_agent)) . $user_agent;
    
    print "[~] try to login as $login:$password\n";
    print $sock make_mrim_packet($MRIM_CS_LOGIN2, $data);    ## посылаем пакет
    $seq_real++;                ## не забывая про счетчик сообщений
    sysread ($sock, my $ack, 48);        ## считываем ответ
    my ($magic, $proto, $seq, $msg, $dlen, $from, $fromport, $r1, $r2, $r3, $r4, $data_ack) = unpack ("L12", $ack);
                        ## и распаковываем его
    if ($msg == $MRIM_CS_LOGIN_ACK)        ## проверяем удачно ли прошла авторизация
    { 
        print "[+] authorization succesfull\n";
    }
    elsif ($msg == $MRIM_CS_LOGIN_REJ)
    {
        print "[-] bad authorization:$data_ack\n";
    }
    else
    {
        print "[!] something wrong!\n";
    }    
}




## eof..    

   
 
 автор: Poison   (03.08.2007 в 10:55)   письмо автору
 
   для: winflip   (03.08.2007 в 10:54)
 

Чем помоч?

ЗЫ Зачем прицепил код?) он ведь по ссылке есть.

   
 
 автор: winflip   (03.08.2007 в 11:03)   письмо автору
 
   для: Poison   (03.08.2007 в 10:55)
 

выводит ошибку 500

   
 
 автор: winflip   (03.08.2007 в 11:34)   письмо автору
 
   для: winflip   (03.08.2007 в 11:03)
 

а можно это сделать с помощью пхп

   
 
 автор: Poison   (03.08.2007 в 11:46)   письмо автору
 
   для: winflip   (03.08.2007 в 11:34)
 

а можно это сделать с помощью пхп

Да. Я пишу на пхп, буду постепенно выкладывать сюда код:) Можно (спрашиваю администрацию)?

   
 
 автор: Disable   (03.08.2007 в 12:00)   письмо автору
 
   для: winflip   (03.08.2007 в 11:34)
 

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

   
 
 автор: mihdan   (03.08.2007 в 11:42)   письмо автору
 
   для: winflip   (03.08.2007 в 11:03)
 

Вечный глюк людей, пишушщих на перле - 500 - я ошибка. Заголовок нужно слать что это text/html

   
 
 автор: winflip   (03.08.2007 в 12:03)   письмо автору
 
   для: mihdan   (03.08.2007 в 11:42)
 

это не глюк людей просто я на перле никогда не писал. а как указать текст html

   
 
 автор: Poison   (03.08.2007 в 12:10)   письмо автору
 
   для: winflip   (03.08.2007 в 12:03)
 


<% print "Content-type: text/html\n";

   
 
 автор: winflip   (03.08.2007 в 12:14)   письмо автору
 
   для: Poison   (03.08.2007 в 12:10)
 

спасибо

   
 
 автор: winflip   (03.08.2007 в 12:18)   письмо автору
 
   для: winflip   (03.08.2007 в 12:14)
 

все равно не работает

   
 
 автор: Poison   (03.08.2007 в 16:55)   письмо автору
 
   для: winflip   (03.08.2007 в 12:18)
 

Что пишит?

   
 
 автор: winflip   (03.08.2007 в 17:34)   письмо автору
 
   для: Poison   (03.08.2007 в 16:55)
 

ошибка 500

   
 
 автор: mihdan   (03.08.2007 в 18:01)   письмо автору
 
   для: winflip   (03.08.2007 в 17:34)
 

путь верный #!/usr/bin/perl ???

   
 
 автор: winflip   (03.08.2007 в 18:03)   письмо автору
 
   для: mihdan   (03.08.2007 в 18:01)
 

да

   
 
 автор: winflip   (03.08.2007 в 18:03)   письмо автору
 
   для: mihdan   (03.08.2007 в 18:01)
 

да

   
 
 автор: winflip   (03.08.2007 в 18:04)   письмо автору
 
   для: mihdan   (03.08.2007 в 18:01)
 

да

   
 
 автор: winflip   (03.08.2007 в 18:05)   письмо автору
 
   для: mihdan   (03.08.2007 в 18:01)
 

да

   
 
 автор: mihdan   (03.08.2007 в 18:05)   письмо автору
 
   для: winflip   (03.08.2007 в 18:05)
 

Не нужно по 4 раза писать, зачем флудить. Другие скрипты работают на Perl'e

   
 
 автор: winflip   (03.08.2007 в 18:08)   письмо автору
 
   для: mihdan   (03.08.2007 в 18:05)
 

не пробовал? можете привести пример самого простого скрипта

   
 
 автор: Poison   (03.08.2007 в 22:31)   письмо автору
 
   для: winflip   (03.08.2007 в 18:08)
 

.

   
 
 автор: Ralph   (03.08.2007 в 22:52)   письмо автору
 
   для: mihdan   (03.08.2007 в 18:05)
 

И это говорит человек,сующий свою рекламу в каждый свой пост...

   
 
 автор: Poison   (03.08.2007 в 22:59)   письмо автору
 
   для: Ralph   (03.08.2007 в 22:52)
 

А по делу?:)

   
 
 автор: Proger   (04.08.2007 в 22:34)   письмо автору
 
   для: Poison   (03.08.2007 в 10:24)
 

Как делишки с протоколчиком? Не нашёл/написал? Если найдёшь/напишешь отписывай - мне тоже очень нужно!

   
 
 автор: Poison   (10.08.2007 в 20:04)   письмо автору
 
   для: Poison   (03.08.2007 в 10:24)
 

Ну вот, как и обещал=)

   
 
 автор: Proger   (11.08.2007 в 00:12)   письмо автору
 
   для: Poison   (10.08.2007 в 20:04)
 

А пример использования? Например отправить месагу челу с мылом: 4el@mail.ru - Привет??!

   
 
 автор: Proger   (22.08.2007 в 16:34)   письмо автору
 
   для: Proger   (11.08.2007 в 00:12)
 

=((

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования