|
|
|
| Вот решил заняться изучение протокола=) Начал писать свой класс для работы с ним.
Пока класс может вывести бота в онлайн и висеть там...=) на этом мои знания и набранная информация кончились...
Может кто видел или сам знает полезную инфу по протоколу.?
Может есть хороший снифер?
Приведу ссылки что я накопал:
http://agent.mail.ru/developers/protocol.html - Официальная инфа (в основном описание работы)
http://forum.antichat.ru/printthread.php?t=38069 - Более интересно. | |
|
|
|
|
|
|
|
для: 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..
|
| |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 10:54)
| | Чем помоч?
ЗЫ Зачем прицепил код?) он ведь по ссылке есть. | |
|
|
|
|
|
|
|
для: Poison
(03.08.2007 в 10:55)
| | выводит ошибку 500 | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 11:03)
| | а можно это сделать с помощью пхп | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 11:34)
| | а можно это сделать с помощью пхп
Да. Я пишу на пхп, буду постепенно выкладывать сюда код:) Можно (спрашиваю администрацию)? | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 11:34)
| | Однажды я наткнулся на скрипт, который отправлял смс через мрим, сейчас смс эти не доходят (а раньше нормально работало), но думаю все равно полезно будет до кучи. | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 11:03)
| | Вечный глюк людей, пишушщих на перле - 500 - я ошибка. Заголовок нужно слать что это text/html | |
|
|
|
|
|
|
|
для: mihdan
(03.08.2007 в 11:42)
| | это не глюк людей просто я на перле никогда не писал. а как указать текст html | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 12:03)
| |
<% print "Content-type: text/html\n";
|
| |
|
|
|
|
|
|
|
для: Poison
(03.08.2007 в 12:10)
| | спасибо | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 12:14)
| | все равно не работает | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 12:18)
| | Что пишит? | |
|
|
|
|
|
|
|
для: Poison
(03.08.2007 в 16:55)
| | ошибка 500 | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 17:34)
| | путь верный #!/usr/bin/perl ??? | |
|
|
|
|
|
|
|
для: mihdan
(03.08.2007 в 18:01)
| | да | |
|
|
|
|
|
|
|
для: mihdan
(03.08.2007 в 18:01)
| | да | |
|
|
|
|
|
|
|
для: mihdan
(03.08.2007 в 18:01)
| | да | |
|
|
|
|
|
|
|
для: mihdan
(03.08.2007 в 18:01)
| | да | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 18:05)
| | Не нужно по 4 раза писать, зачем флудить. Другие скрипты работают на Perl'e | |
|
|
|
|
|
|
|
для: mihdan
(03.08.2007 в 18:05)
| | не пробовал? можете привести пример самого простого скрипта | |
|
|
|
|
|
|
|
для: winflip
(03.08.2007 в 18:08)
| | . | |
|
|
|
|
|
|
|
для: mihdan
(03.08.2007 в 18:05)
| | И это говорит человек,сующий свою рекламу в каждый свой пост... | |
|
|
|
|
|
|
|
для: Ralph
(03.08.2007 в 22:52)
| | А по делу?:) | |
|
|
|
|
|
|
|
для: Poison
(03.08.2007 в 10:24)
| | Как делишки с протоколчиком? Не нашёл/написал? Если найдёшь/напишешь отписывай - мне тоже очень нужно! | |
|
|
|
|
|
|
|
для: Poison
(03.08.2007 в 10:24)
| | Ну вот, как и обещал=) | |
|
|
|
|
|
|
|
для: Poison
(10.08.2007 в 20:04)
| | А пример использования? Например отправить месагу челу с мылом: 4el@mail.ru - Привет??! | |
|
|
|
|
|
|
|
для: Proger
(11.08.2007 в 00:12)
| | =(( | |
|
|
|