ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

отправка на Icq
  #1  
Старый 06.07.2005, 19:38
Аватар для Mefisto
Mefisto
Участник форума
Регистрация: 10.10.2004
Сообщений: 101
Провел на форуме:
6287

Репутация: 4
Отправить сообщение для Mefisto с помощью ICQ
По умолчанию отправка на Icq

И последний вопросик на сегодня. Как с помощью пхп можно отправить сообщение на icQ? Хоть примерно скажите...
 
Ответить с цитированием

  #2  
Старый 06.07.2005, 20:57
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

на http://ccteam.nukleon.us/ в релизах глянь, тристрам писал...

только тебе это еще рано =)
 
Ответить с цитированием

  #3  
Старый 06.07.2005, 21:09
Аватар для Mefisto
Mefisto
Участник форума
Регистрация: 10.10.2004
Сообщений: 101
Провел на форуме:
6287

Репутация: 4
Отправить сообщение для Mefisto с помощью ICQ
По умолчанию

а чего рано то? )))
 
Ответить с цитированием

  #4  
Старый 06.07.2005, 21:12
Аватар для Mefisto
Mefisto
Участник форума
Регистрация: 10.10.2004
Сообщений: 101
Провел на форуме:
6287

Репутация: 4
Отправить сообщение для Mefisto с помощью ICQ
По умолчанию

млин пишет документ не найден ((
 
Ответить с цитированием

  #5  
Старый 06.07.2005, 21:24
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Mefisto, почему рано?
что-же ты тогда спрашиваешь, как делать?

тебе понадобятся всего 3 функции:
fwrite(), wread(), fsockopen()

делай
потом покажешь =)
 
Ответить с цитированием

  #6  
Старый 06.07.2005, 21:29
Аватар для Mefisto
Mefisto
Участник форума
Регистрация: 10.10.2004
Сообщений: 101
Провел на форуме:
6287

Репутация: 4
Отправить сообщение для Mefisto с помощью ICQ
По умолчанию

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

Кстать, че документов на месте нету? )
 
Ответить с цитированием

  #7  
Старый 06.07.2005, 21:38
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

OSCAR (ICQ v7/v8/v9) protocol documentation
[ http://iserverd1.khstu.ru/oscar/ ]
 
Ответить с цитированием

  #8  
Старый 07.07.2005, 02:06
Аватар для t4k
t4k
Новичок
Регистрация: 06.07.2005
Сообщений: 10
Провел на форуме:
0

Репутация: 0
По умолчанию

Вот рабочий линк на php icq клиент: http://ccteam.ru/releases/c99phpicq
 
Ответить с цитированием

  #9  
Старый 07.07.2005, 16:56
Аватар для x_Lex
x_Lex
Участник форума
Регистрация: 08.01.2005
Сообщений: 178
Провел на форуме:
2186077

Репутация: 438
По умолчанию

скрипт-пример, который отправляет сообщение, а потом висит он-лайн и принимает сообщения.
Код:
#!/usr/bin/perl -w

# Simple authorization/sending/receiving script special for Poizon.Net.Ru

use Socket;
use IO::Handle;
use strict;

sub print_data;
sub get_cookies;
sub xor_password;
sub list_services;
sub get_in_icq;
sub get_in_msg;

my $server="login.icq.com"; # авторизатор
my $port=5190; # порт авторизатора

my $uin="330866043"; # уин, нак который заходить
my $password="vivviv"; # пароль
my $client_id="Fake icq-client special for poizon.net.ru =)"; #версия клиента в STRING

my $to_uin="822003"; # куда слать месагу
my $send_message="justa test!! Do Not Reply To This Message!!"; # текст сообщения

my %families_list= ( #расшифровка номеров групп сервисов
1 => "Generic service controls",
2 => "Location services",
3 => "Buddy List management service",
4 => "ICBM (messages) service",
5 => "Advertisements service",
6 => "Invitation service",
7 => "Administrative service",
8 => "Popup notices service",
9 => "Privacy management service",
10 => "User lookup service (not used any more)",
11 => "Usage stats service",
12 => "Translation service",
13 => "Chat navigation service",
14 => "Chat service",
15 => "Directory user search",
16 => "Server-stored buddy icons (SSBI) service",
19 => "Server Side Information (SSI) service",
21 => "ICQ specific extensions service",
23 => "Authorization/registration service",
34 => "Unknown",
133 => "Broadcast service - IServerd extension"
);

my $i=0;
my $temp_string;
my $answer_data;  # ответ сервера
my $auth_request; #посылаемый пакет

my $FlAP_header; # заголовок FLAP пакета (сигнатура начала данных, номер канала,  sequence number, длина данных)
my $data; # данные пакета
my $BOS_server_address; # ип основного сервера для работы с icq
my $BOS_server_port; # порт сервера

$data= #(основнные данные)
"\x00\x00\x00\x01". #версия протокола
"\x00\x01".pack('n',length($uin)).$uin. #сигнатура уина, длина уина, уин
"\x00\x02".pack('n',length($password)).xor_password($password). #то же для пароля
"\x00\x03".pack('n',length($client_id)).$client_id. # то же для клиента
"\x00\x16".pack('n',2).pack('n',266). # версии клиента: мажор, минор, билд и тд
"\x00\x17".pack('n',2).pack('n',4). # -||-
"\x00\x18".pack('n',2).pack('n',65). # -||-
"\x00\x19".pack('n',2).pack('n',1). # -||-
"\x00\x1A".pack('n',2).pack('n',3281). # -||-
"\x00\x14".pack('n',4).pack('N',85). # -||-
"\x00\x0F".pack('n',2)."en". # язык клиента
"\x00\x0E".pack('n',2)."us"; # страна клмента

$FlAP_header=
"\x2a". #всегда! начинается с \x2a
"\x01". # первый канал (New Connection Negotiation)
"\x13\x5A". # seq number (random). 
pack('n',length($data)); # размер данных ($data). WORD

$auth_request=$FlAP_header.$data; # формируем пакет

print "\n Connecting...\n";
socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname('tcp')) or die "socket() failed: $!\n"; #создаём сокет
connect(SOCK,sockaddr_in($port,inet_aton($server))) or return 0;
SOCK->autoflush(1);

print "\n  Reading server welcom message...\n";
sysread(SOCK,$answer_data,1024); #получаем строку от сервера
print_data($answer_data); #печатаем её в hex

print "\n\n  Sending auth packet...\n"; #шлём пакет
print SOCK $auth_request;
print_data($auth_request); #получаем ответ

print "\n\n  Reading answer...\n"; # получаем ответ (либо cookies в случае success, либо код ошибки)
sysread(SOCK,$answer_data,1024);
print_data($answer_data);

if ($answer_data=~/\x00\x08/) {
print "\n\n  Authorization error... Exiting\n";
exit;
}
print "\n\n  Authorization success...\n";

close(SOCK);

#  GETTING BOS ADRESS/PORT

($BOS_server_address, $BOS_server_port)=$answer_data=~/\x2a\x04.{4}\x00\x01.{2}$uin\x00\x05.{2}([0-9\.]+):([0-9]+)\x00/;
#получаем BOS server address и BOS server port

# ---------- Client sends cookie (cli_cookie) /oscar_spec/cli_cookie.html
undef $data;
undef $FlAP_header;

$data=
"\x00\x00\x00\x01". #версия протокола
"\x00\x06".pack('n',256).get_cookies($answer_data); #0x00006 (сигнатура куки), длина куки (256), сами куки из предыдущего запроса

$FlAP_header= # формируем FLAP заголовок (1 канал)
"\x2a".
"\x01".
"\x13\x5B".
pack('n',length($data));

$auth_request=$FlAP_header.$data; #формируем FLAP пакет

print "\n\n  Connecting to BOS server ($BOS_server_address:$BOS_server_port)...";

socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname('tcp')) or die "socket() failed: $!\n";
connect(SOCK,sockaddr_in($BOS_server_port,inet_aton($BOS_server_address))) or return 0;
SOCK->autoflush(1); # конектим к BOS серверу

print "\n\n  Reading server welcom message...\n"; #получаем строку от сервера
sysread(SOCK,$answer_data,1024);
print_data($answer_data);

print "\n\n  Sending cookies to server...\n"; #шлём FLAP пакет с куками
print_data($auth_request);
print SOCK $auth_request;

print "\n\n  Reading server answer (SRV_FAMILIES)...\n"; #получаем ответ (список номеров доступных сервисов)
sysread(SOCK,$answer_data,1024);
print_data($answer_data);

# ---------- Server sends supported services list (SNAC(01,03)) /oscar_spec/snac_01_03.html
$answer_data=substr($answer_data,16,length($answer_data)); # отрезаем лишние байты
print "\n\n Supported services:\n"; 
list_services($answer_data); # выводим список групп сервисов с расшифровкой


# ----------- Client ask for services version numbers (SNAC(01,17)) /oscar_spec/snac_01_17.html

undef $data;
undef $FlAP_header;

$data= #формируем запрос на получение версий служб
"\x00\x01". # SNAC family # запрос для первой группы (Generic service controls)
"\x00\x17". # SNAC subtype # служба (SNAC 01_17) Request server services versions
"\x00\x00". # SNAC flags # флаги
"\x00\x00\x00\x00". # SNAC request-id (random)
# from CenterICQ
"\x00\x01". # family number #1
"\x00\x03". # family version

"\x00\x02". # family number #2
"\x00\x01". # family version

"\x00\x03". # etc. и тд
"\x00\x01". # etc.

"\x00\x15". # etc.
"\x00\x01". # etc.

"\x00\x04". # etc.
"\x00\x01". # etc.

"\x00\x06". # etc.
"\x00\x01". # etc.

"\x00\x09". # etc.
"\x00\x01". # etc.

"\x00\x0a". # etc.
"\x00\x01"  # etc.
;

$FlAP_header= #формируем FLAP заголовок (2 канал)
"\x2a".
"\x02". # второй канал (SNAC data)
"\x13\x5c".
pack('n',length($data));

$auth_request=$FlAP_header.$data;

print "\n\n  Sending request for family versions to server...\n";
print_data($auth_request);
print SOCK $auth_request;

print "\n\n  Reading server answer (SRV_FAMILIES_VERSIONS)...\n"; # получаем версии служб
sysread(SOCK,$answer_data,1024);
print_data($answer_data);

# ----------- Server sends its services version numbers (SNAC(01,18)) /oscar_spec/snac_01_18.html

#

# -----------  Client ask server for rate limits info (SNAC(01,06)) /oscar_spec/snac_01_06.html

undef $data;
undef $FlAP_header;

$data= #составляем запрос на получение списка ограничений сервера
"\x00\x01". # группа 1
"\x00\x06". # сервис 0x0006 (Request rate limits information)
"\x00\x00". # флаги
"\x00\x00\x00\x00"; #ид

$FlAP_header=
"\x2a".
"\x02". # второй канал
"\x13\x5d".
pack('n',length($data));

$auth_request=$FlAP_header.$data;

print "\n\n  Sending request for rate limits info...\n";
print_data($auth_request);
print SOCK $auth_request;

print "\n\n  Reading server answer (SRV_RATE_LIMIT_INFO)...\n";
sysread(SOCK,$answer_data,2048);
print_data($answer_data);

# -----------  Server sends rate limits information (SNAC(01,07)) /oscar_spec/snac_01_07.html

#

# ----------- Client ack connection rate limits (SNAC(01,08)) /oscar_spec/snac_01_08.html

undef $data;
undef $FlAP_header;

$data=      #From CenterICQ
"\x00\x01".
"\x00\x08".
"\x00\x00".
"\x00\x00\x00\x00".
"\x00\x01".
"\x00\x02".
"\x00\x03".
"\x00\x04".
"\x00\x05"
;

$FlAP_header=
"\x2a".
"\x02".
"\x13\x5e".
pack('n',length($data));

$auth_request=$FlAP_header.$data;

print "\n\n  ack connection rate limit...\n";
print_data($auth_request);
print SOCK $auth_request;

# ----------- Client sends its status to server (SNAC(01,1E)) /oscar_spec/snac_01_1e.html

undef $data;
undef $FlAP_header; 

$data= # составляем запрос на передачу серверу своего статуса (online)
"\x00\x01". # первая группа служб
"\x00\x1e". # сервис 0x001e (Set status (set location info)) SNAC 01_1e
"\x00\x00". # флаг
"\x00\x00\x00\x00". # ид
"\x00\x06". # TLV.Type = 0x0006 (Type-Length-Value)user status / status flags
"\x00\x04". # длина TLV
"\x01\00\x00\x00" # данные TLV (статус юзера - online. смотри /oscar_spec/lists.html#user_status)
;

$FlAP_header=
"\x2a".
"\x02". #второй канал
"\x13\x5f".
pack('n',length($data));

$auth_request=$FlAP_header.$data;

print "\n\n  Sending status to server...\n";
print_data($auth_request);
print SOCK $auth_request;

print "\n\n  Reading server answer... (SNAC(01,0F))\n";
sysread(SOCK,$answer_data,2048);
print_data($answer_data);

# ---------- reading server response (SNAC(01,0F))

#

# ---------- Client READY command (SNAC(01,02))

undef $data;
undef $FlAP_header; # From cemterICQ

$data= # отсылаем команду READY серверу (необходимо отослать в течении первых 30 секунд)
"\x00\x01". # номер группы 1
"\x00\x02". # номер службы (Client is now online and ready for normal function)
"\x00\x00". # флаг
"\x00\x00\x00\x00". #ид

"\x00\x01". # family number #1
"\x00\x03". # family #1 version
"\x01\x10". # family #1 tool id
"\x02\x8a". # family #1 tool version

"\x00\x02". # etc.
"\x00\x01".
"\x01\x01".
"\x02\x8a".

"\x00\x03". # etc
"\x00\x01".
"\x01\x10".
"\x02\x8a".

"\x00\x15".
"\x00\x01".
"\x01\x10".
"\x02\x8a".

"\x00\x04".
"\x00\x01".
"\x01\x10".
"\x02\x8a".

"\x00\x06".
"\x00\x01".
"\x01\x10".
"\x02\x8a".

"\x00\x09".
"\x00\x01".
"\x01\x10".
"\x02\x8a".

"\x00\x0a".
"\x00\x01".
"\x01\x10".
"\x02\x8a";

$FlAP_header=
"\x2a".
"\x02".
"\x13\x60".
pack('n',length($data));

$auth_request=$FlAP_header.$data;

print "\n\n  Sending READY command to server...\n";
print_data($auth_request);
print SOCK $auth_request; # отправляем серверу и мы он-лайн!

print "\n\n  UIN ON-LINE...\n";

# --------- SENDING MESSAGE ------------ #

# отсылаем сообщение на уин

undef $data;
undef $FlAP_header;

my $part1= # формируем запрос для отправки сообщения по каналу 2
"\x00\x04\x00\x06". # # группа 4 (ICBM service) служба 6 ( Send message thru server)
"\x00\x00". # флаг
"\x00\x00\x00\x00". # ид
"\xe4\x70\x7c\xbf". # msg-id ид сообщения
"\x67\xfd\x91\x6f". # msg-id ид сообщения
"\x00\x02". # channel второй канал для отсылки сообщения
pack("w",length($to_uin)). # icq length длина icq получателя
$to_uin. # icq получателя
"\x00\x05"; # TLV.Type(0x05) - rendezvous message data, установка значения
# тут длина TLV, но его мы вставим позже
my $part2=
"\x00\x00". # message type, тип сообщения
"\xe4\x70\x7c\xbf". # msg-id ид (то же что и выше)
"\x67\xfd\x91\x6f". # msg-id ид (то же что и выше)
"\x09\x46\x13\x49\x4c\x7f\x11\xd1\x82\x22\x44\x45\x53\x54\x00\x00". # guid (формат данных) смотри /oscar_spec/capabilities.html (09461349-4c7f-11d1-8222-4445535-40000)
"\x00\x0a". # unknown TLV.Type хз 
"\x00\x02". # Length длина этого хз
"\x00\x01". # unknown хз
"\x00\x0f". # unknown TLV.Type
"\x00\x00". # Length
"\x27\x11"; # TLV.Type(0x2711) - extention data (устанавливаем данные)
# тут должна быть блина TLV 0x2711,, но её мы установим позже
my $part3=
"\x1b\x00". # length of following data
"\x07\x00". # protocol version
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00". # plugin or zero bytes хз что
"\x00\x00". # unknown хз
"\x03\x00\x00\x00". # client capabilities flags хз
"\x00". # unknown хз
"\xe9\xff". # seems to be a downcounter хз
"\x0e\x00". # length of following data
"\xe9\xff". # seems to be a downcounter хз
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00". # unknown, usually zeros хз
"\x01". # message type типа сообщения (01 - plain text)
"\x00". # message flags
"\x00\x00". # status code
"\x01\x00". # priority code

pack("v",length("$send_message\0")). #  длина сообщения
"$send_message\x00". # само сообщение с \0 в конце
"\x00\x00\x00\x00". # text color (rgbn, optional)
"\xff\xff\xff\x00"; # background color (rgbn, optional)

$data=$part1.pack('n',length($part2.$part3)+2).$part2.pack('n',length($part3)).$part3; # составляем данные, подставляя все TLV размеры

$data.=
"\x00\x03". # request an ack from server (требовать от сервера ответ)
"\x00\x00"; # длина TLV данных (0)

$FlAP_header= # FLAP заголовок
"\x2a".
"\x02".
"\x13\x61".
pack('n',length($data));

$auth_request=$FlAP_header.$data;

print "\n\n  Sending message to server...\n";
print_data($auth_request);
print SOCK $auth_request; # отсылаем запрос и соотвественно сообщение

print "\n\n  Reading server answer...\n";
sysread(SOCK,$answer_data,2048); # получаем ответ сервера
print_data($answer_data);


while(1){
sysread(SOCK,$answer_data,2048); # ждём входящих сообщений (очень хуёво)
print "\n\nIncoming message from ".get_in_icq($answer_data).": \n"; # выводим их на экран (очень хуёво)
print get_in_msg($answer_data)."\n"; #(очень хуёво)
}
## FUNCTIONS

sub print_data() { # выводим данные в hex

my ($data)=@_;
my $i=0;

foreach(split(//,$data)) {
print unpack('H8',$_)." ";
$i++;
if ($i eq 16) {
print "\n"; 
$i=0;
}

}

}

sub get_cookies() { # выдераем куки из ответа сервера 

my ($data)=@_;
my $cookies;
my $i=0;
my $c=0;
foreach(split(//,$data)) {
$i=1 if($c eq "\x00" && $_ eq "\x06");
$cookies.=$_ if $i eq 1;
$c=$_;
}
return substr($cookies,3,length($cookies));

}

sub xor_password() { # ксорим пароль

my ($password)=@_;

my @password_xor=("\xF3", "\x26", "\x81", "\xC4", "\x39", "\x86","\xDB", "\x92", "\x71", "\xA3", "\xB9", "\xE6", "\x53", "\x7A", "\x95","\x7C"); # константы для "шифровки" пароля

my $xored_password; # проксореный пароль
my $i=0;

foreach(split(//,$password)) {
$xored_password.=$_ ^ $password_xor[$i++];
$i=0 if $i eq @password_xor;
}

return $xored_password;

}

sub list_services() { # делаем список групп служб
my ($data)=@_;
my $temp_string;
while($temp_string=substr($data,0,2)) {

print unpack('n',$temp_string)." (0x".unpack('H8',$temp_string).") ".
$families_list{unpack('n',$temp_string)}."\n";

$data=substr($data,2,length($data));
}

}

sub get_in_icq() { # ведыерам номер icq из входящего сообщения (очень хуёво)
my ($data)=@_;
my $icq;
$icq=substr($data,27,length($data));
$icq=~/^([0-9]+)/;
return $1;
}


sub get_in_msg() { # выдераем текст сообщения (очень хуёво)
my ($data)=@_;
$data=~/^.{6}\x00\x04\x00\x07.+\x00(.+)$/;
return $1;
}
 
Ответить с цитированием

  #10  
Старый 07.07.2005, 17:13
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

x_Lex, копирайты ставь
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка почты (php - скрипт) Майор PHP, PERL, MySQL, JavaScript 6 01.01.2006 20:20
Отправка почты чере php - скрипт Майор PHP, PERL, MySQL, JavaScript 15 25.06.2005 23:27



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ