php+icq
php+icq
Hi all,
ehm, nevie pls niekto, ako poslať cez php-čko message niekomu na icq?
dostal som taký tip, prezreť si icq protokol, trebars v zdrojákoch mirandy, ale nie že by som bol lenivý, čo vlastne som, takže sa mi tam nechce babrať v komplet procedurálne riešenom kode .) gúgla som prešiel snaď celého, ale výsledky boli len programy staré 4 roky, čiže nefunkčné a žiadne source code..
aa.. btw, pls shell_exec() vynechať.. bodlo by iba fsockopen()..
many thx ;P
ehm, nevie pls niekto, ako poslať cez php-čko message niekomu na icq?
dostal som taký tip, prezreť si icq protokol, trebars v zdrojákoch mirandy, ale nie že by som bol lenivý, čo vlastne som, takže sa mi tam nechce babrať v komplet procedurálne riešenom kode .) gúgla som prešiel snaď celého, ale výsledky boli len programy staré 4 roky, čiže nefunkčné a žiadne source code..
aa.. btw, pls shell_exec() vynechať.. bodlo by iba fsockopen()..
many thx ;P
-
mastermind
VIP
- Príspevky: 4810
- Registrovaný: 09 feb 2005, 13:17
hadam si uz nasielhttp://www.jabber.sk/, presnejsie: http://www.jabber.sk/sluzby.phpFinalway napísal:HUH.. jabber jabber.. čo to? tuším chatovací program? abo ja neviem, viem, že to tu mám ako plugin v trilliane, ale ešte som nečekol čo to je zač..
skúsim pozrieť na nete, ale pochybujem, že to tak pôjde..
mno, po dlhom čase trochu prekonaná lenivosť a trochu naštudovaný icq protokol z http://iserverd1.khstu.ru/oscar/ a výsledok icq trieda na posielanie správ do icq siete cez phpčko... ak by to dakto chcel, tak to tu máte..
Kód: Vybrať všetko
<?
class icq
{
var $soket,$input,$return,$bos_soket;
var $flap_pozicia = 44;
var $xor = "\xF3\x26\x81\xC4\x39\x86\xDB\x92\x71\xA3\xB9\xE6\x53\x7A\x95\x7C";
function flap_poziadavok()
{
$this->flap_pozicia++;
return pack('c',$this->flap_pozicia);
}
function spracuj($cislo,$icq=NULL,$pwd=NULL,$klient=NULL,$obsah=NULL,$cookie=NULL,$pre=NULL,$sprava=NULL)
{
// dlzky n a c pre flap: c=8 bitova, n=16 bitova
$this->return = '';
switch($cislo)
{
case '1' : // vyhotovenie ziadosti o autorizaciu + XORovane heslo - http://iserverd1.khstu.ru/oscar/cli_ident.html
// je tam este jedna moznost pomocou md5 hashu, ale nakolko to je zdlhavejsi proces, vyberam tento
$this->return = "\x00\x00\x00\x01"; // verzia protokolu
$this->return .= "\x00\x01" . pack('n',strlen($icq)) . $icq; // kanal . dlzka . icq_cislo
$this->return .= "\x00\x02" . pack('n',strlen($pwd)) . ($pwd ^ (substr($this->xor,0,strlen($pwd)))); // kanal . dlzka . xornute_heslo
$this->return .= "\x00\x03" . pack('n',strlen($klient)) . $klient; // kanal . dlzka . nazov_klienta
$this->return .= "\x00\x16" . pack('n',2) . pack('n',266); // kanal . dlzka . id_klienta
$this->return .= "\x00\x17" . pack('n',2) . pack('n',4); // kanal . dlzka . verzia_klienta
$this->return .= "\x00\x18" . pack('n',2) . pack('n',65); // kanal . dlzka . vedlajsia_verzia
$this->return .= "\x00\x19" . pack('n',2) . pack('n',1); // kanal . dlzka . najmensia_verzia
$this->return .= "\x00\x1A" . pack('n',2) . pack('n',3281); // kanal . dlzka . vyrobna_verzia
$this->return .= "\x00\x14" . pack('n',4) . pack('N',85); // kanal . dlzka . distribucne_cislo
$this->return .= "\x00\x0F" . pack('n',2) . "sk"; // kanal . dlzka . jazyk_klienta
$this->return .= "\x00\x0E" . pack('n',2) . "sk"; // kanal . dlzka . adresa_klienta
$this->return = "\x2a\x01\x13" . $this->flap_poziadavok() . pack('n', strlen($this->return)) . $this->return; // FLAP . FLAP_id . dlzka . ziadost
break;
case '2' : // spracovanie output-u, kanal: 0x05: xx xx BOS server:port
$this->parsuj = explode("\x00", $obsah);
$this->return = substr($this->parsuj[4],1);
break;
case '3' : // spracovanie output-u, kanal: 0x06: xx xx cookie, cookie moze obsahovat oznacenie kanalu 0x06
// preto sa parsuje od prvej najdenej hodnoty, dlzka cookie je 2048 bitov
$this->parsuj = explode("\x06", $obsah);
$this->return = substr($this->fread, strlen($this->parsuj[0])+3);
break;
case '4' : // poslatie cookie BOS serveru - http://iserverd1.khstu.ru/oscar/cli_cookie.html
$this->return = "\x00\x00\x00\x01"; // verzia protokolu
$this->return .= "\x00\x06" . pack('n', strlen($cookie)) . $cookie; // kanal coookie . dlzka . cookie
$this->return = "\x2a\x01\x13" . $this->flap_poziadavok() . pack('n', strlen($this->return)) . $this->return; // flap . flap_id . dlzka . obsah
break;
case '5' : // vytvorenie ziadosti - http://iserverd1.khstu.ru/oscar/snac_01_17.html
// hodnoty mozu byt default, pokial by vsak neposlal niektoru z horeuvedenych rodin, vtedy server nevyhovie
$this->return = "\x00\x01\x00\x17\x00\x00\x00\x00\x00\x17";
$this->return .= "\x00\x01\x00\x03\x00\x13\x00\x02\x00\x02\x00\x01\x00\x03\x00\x01";
$this->return .= "\x00\x15\x00\x01\x00\x04\x00\x01\x00\x06\x00\x01\x00\x09\x00\x01";
$this->return .= "\x00\x0A\x00\x01\x00\x0B\x00\x01";
$this->return = "\x2a\x02\x13" . $this->flap_poziadavok() . pack('n', strlen($this->return)) . $this->return; // flap/flap_id . dlzka ziadosti . ziadost
break;
case '6' : // ziadost o rate limits - http://iserverd1.khstu.ru/oscar/snac_01_06.html
$this->return = "\x00\x01\x00\x06\x00\x00\x00\x00\x00\x06"; // rodiny
$this->return = "\x2a\x02\x13" . $this->flap_poziadavok() . pack('n', strlen($this->return)) . $this->return; // flap/flap_id . dlzka ziadosti . ziadost
break;
case '7' : // http://iserverd1.khstu.ru/oscar/snac_01_08.html
$this->return = "\x2a\x2\x13" . $this->flap_poziadavok() . "\x0\x12\x0\x1\x0\x1e\x0"; // flap/flap_id, dlzka a default rodiny/SNAC rate-limits
$this->return .= "\x0\x1\x5e\xb4\x5c\x0\x6\x0\x4\x20\x8\x0\x20";
break;
case '8' : // http://iserverd1.khstu.ru/oscar/snac_01_1e.html
// status som nastavil na 0x0000 - online
// - http://iserverd1.khstu.ru/oscar/lists.html#user_status
$this->return = "\x00\x01\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x06\x00\x04\x00\00\x00\x00";
$this->return = "\x2a\x02\x13" . $this->flap_poziadavok() . pack('n', strlen($this->return)) . $this->return; // flap/flap_id . dlzka . obsah
break;
case '9' : // oboznamenie servera o tom, ze sme pripraveni na pouzivanie zakladnych funkcii
// http://iserverd1.khstu.ru/oscar/snac_01_02.html
$this->return = "\x00\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00";
$this->return .= "\x01\x00\x03\x01\x10\x02\x8a\x00\x02\x00\x01\x01\x01\x02\x8a";
$this->return .= "\x00\x03\x00\x01\x01\x10\x02\x8a\x00\x15\x00\x01";
$this->return .= "\x01\x10\x02\x8a\x00\x04\x00\x01\x01\x10\x02\x8a";
$this->return .= "\x00\x06\x00\x01\x01\x10\x02\x8a\x00\x09\x00";
$this->return .= "\x01\x01\x10\x02\x8a\x00\x0a\x00\x01\x01\x10\x02\x8a";
$this->return = "\x2a\x02\x13" . $this->flap_poziadavok() . pack('n', strlen($this->return)) . $this->return;
break;
case '10' : // vypracovanie ziadosti a zaslatie spravy
$pre = str_replace('-', '', $pre);
$this->return = "\x0\x0\x0\x0" . $sprava; // kanal pre spravu . sprava
$this->return = "\x5\x1\x0\x1\x31\x1\x1" . pack('n', strlen($this->return)) . $this->return; // oznacenie spravy . dlzka . kanal+sprava
$this->return = "\x0\x4\x0\x6\x0\x0\x1\x5e\xb8\xe3\x0\x0\x0\x0\x1\x5e\xb8\xe6\x0\x1" . pack('c', strlen($pre)) . $pre . "\x0\x2" . pack('n', strlen($this->return)) . $this->return;
$this->return = "\x2a\x2\x13" . $this->flap_poziadavok() . pack('n', strlen($this->return)) . $this->return;
break;
}
return $this->return;
}
function pripoj($icq_cislo,$icq_heslo)
{
$icq_cislo = str_replace('-', '', $icq_cislo);
$this->soket = fsockopen('login.icq.com','5190'); // zacina spojenie s autorizacnym serverom
$this->fread = fread($this->soket, 10); // precita sa welcome "sprava"
$this->input = $this->spracuj(1,$icq_cislo,$icq_heslo,'ultra vyborny ;)');
fwrite($this->soket, $this->input); // posle sa ziadost o autorizaciu
$this->fread = fread($this->soket, 310);// server vracia icq, BOS server:port, a aut. cookie
@fclose($this->soket); // konci spojenie s autorizacnym serverom
if(strlen($this->fread) < 289)
{
return 0; // odstaveny log-in, alebo zle icq cislo/heslo, http://iserverd1.khstu.ru/oscar/auth_failed.html
}
$this->srv = explode("\x3a", $this->spracuj(2,0,0,0,$this->fread));
$this->bos_server = $this->srv[0];
$this->bos_port = $this->srv[1];
$this->cookie = $this->spracuj(3,0,0,0,$this->fread);
$this->bos_soket = fsockopen($this->bos_server, $this->bos_port); // zacina spojenie s BOS serverom
fread($this->bos_soket, 2048); // cita sa uvitacia sprava
$this->input = $this->spracuj(4,0,0,0,0,$this->cookie);
fwrite($this->bos_soket, $this->input);
fread($this->bos_soket, 2048); // server vracia http://iserverd1.khstu.ru/oscar/snac_01_03.html
$this->input = $this->spracuj(5);
fwrite($this->bos_soket, $this->input);
fread($this->bos_soket, 2048); // server vracia http://iserverd1.khstu.ru/oscar/snac_01_18.html
$this->input = $this->spracuj(6);
fwrite($this->bos_soket, $this->input);
fread($this->bos_soket, 2048); // server vracia http://iserverd1.khstu.ru/oscar/snac_01_07.html
$this->input = $this->spracuj(7);
fwrite($this->bos_soket, $this->input);
fread($this->bos_soket, 2048);
$this->input = $this->spracuj(8);
fwrite($this->bos_soket, $this->input);
fread($this->bos_soket, 2048);
$this->input = $this->spracuj(9);
fwrite($this->bos_soket, $this->input); // po tomto je icq on-line a moze sa poslat sprava
}
function sprava($pre,$sprava)
{
$this->input = $this->spracuj(10,0,0,0,0,0,$pre,$sprava);
@fwrite($this->bos_soket, $this->input); // poslatie spravy
}
function odpoj()
{
@fclose($this->bos_soket); // konci spojenie s BOS serverom
}
}
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$icq = new icq;
$icq->pripoj('icq','heslo');
$icq->sprava('komu','sprava');
$icq->sprava('komu','dalsia sprava');
$icq->odpoj();
?>
-
mastermind
VIP
- Príspevky: 4810
- Registrovaný: 09 feb 2005, 13:17
mastermind, uzavretý protokol? ehm.. vysvetlíš pls?
každopádne si sosni nejaký soft, prezeraj si pakety ktoré skype posiela, domýšľaj si čo je čo, ako to robili tí odkiaľ som študoval icq protokol.. (aspoň tak tipujem, že robili).. daj to sem a môžem sa pokúsiť o niečo..
hojko, no dá sa.. medzi každú deviatu správu treba dať sleep(1), na jednu sekundu to počká a posiela ďalej.. bo icq server ťa odpojí ak posieláš za sebou veľa správ.. + je to spravené tak, že to zaradenie flap formátu je od 44 do 256, takže max. pošleš cca 210 správ.. mohol by som to prerobiť, aby to bralo do 256^2, (menil by som aj prvú hodnotu zaradenia - \x13).. ak by ste chceli, ale až zajtra bo idem preč teraz..
každopádne si sosni nejaký soft, prezeraj si pakety ktoré skype posiela, domýšľaj si čo je čo, ako to robili tí odkiaľ som študoval icq protokol.. (aspoň tak tipujem, že robili).. daj to sem a môžem sa pokúsiť o niečo..
hojko, no dá sa.. medzi každú deviatu správu treba dať sleep(1), na jednu sekundu to počká a posiela ďalej.. bo icq server ťa odpojí ak posieláš za sebou veľa správ.. + je to spravené tak, že to zaradenie flap formátu je od 44 do 256, takže max. pošleš cca 210 správ.. mohol by som to prerobiť, aby to bralo do 256^2, (menil by som aj prvú hodnotu zaradenia - \x13).. ak by ste chceli, ale až zajtra bo idem preč teraz..
-
mastermind
VIP
- Príspevky: 4810
- Registrovaný: 09 feb 2005, 13:17
hm mam maly problem... ked to chcem dat na moju stranku tak to dam ako "icq.php" a ked to potom chcem spustit tak mi vypise toto:
poradtemi o mam spravit
Kód: Vybrať všetko
Warning: fsockopen() has been disabled for security reasons in /home/free/ic.cz/a/allmobile/root/www/ICQ.php on line 102
Warning: fread(): supplied argument is not a valid stream resource in /home/free/ic.cz/a/allmobile/root/www/ICQ.php on line 104
Warning: fwrite(): supplied argument is not a valid stream resource in /home/free/ic.cz/a/allmobile/root/www/ICQ.php on line 107
Warning: fread(): supplied argument is not a valid stream resource in /home/free/ic.cz/a/allmobile/root/www/ICQ.php on line 109poradtemi o mam spravit