
20.02.2009, 20:51
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
eLWAux Вся проблема в том как раз, что ты сразу закрываешь соединение с jabber сервером.
<stream:stream to='jabber.ru' ..... [b]/[b]> Эквивалентно <stream:stream .... ></stream:stream>
Т.е. Сервер отвечает на начальный пакет, и видя закрытие тэга stream:stream - закрывает соединение
Запусти wireshark и такой скрипт
PHP код:
#!/usr/bin/perl
use IO::Socket;
my $sock = new IO::Socket::INET(
PeerAddr => 'jabber.ru',
PeerPort => 5222, #5223
Timeout => 1,
Type => SOCK_STREAM,
Proto => 'tcp',
Blocking => 0) or
die " [-] connect \n";
print "connected!\n";
print $sock "<?xml version='1.0' encoding='UTF-8'?><stream:stream to='jabber.ru' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'>";
read($sock,$input,529); # цифра взята на глазок
print ($input."\n\n------------\n\n");
print $sock "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>";
read($sock,$input,146);
print ($input);
close ($sock);
Будет видно что сервер ответит на оба пакета
Проблема по сути - как получать ответ от сервера. Не зная перл могу предположить, что конструкция while ($input = <$sock>) - будет ждать закрытия сокета и только тогда выведет результат
|
|
|