jabber - проблема с пакетами

Discussion in 'PHP' started by eLWAux, 18 Feb 2009.

  1. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    появилось желание реализовать простой jabber клиент на perl'e.
    использовать Net::XMPP и подобние я нехочу.., все делаю через IO::Socket; т.е. сам составляю пакети..

    коннект (тут проблеми нету) :
    Code:
    my $sock = new IO::Socket::INET(
       PeerAddr => 'jabber.ru',
       PeerPort => 5222, #5223
       Timeout  => 1,
       Proto    => 'tcp') or
        die " [-] connect \n";
    print "connected!\n";
    дальше отправляю первий пакет:
    Code:
     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'>";
     while ($input = <$sock>){debug($input);}
     print ($input);
    и вот тут уже маленькая непонятность =\
    если отправляю: ....n='1.0'> тогда нету ответа от сервера
    если отправляю: ....n='1.0'/> тогда ответ примерно такой:
    Code:
    <?xml version='1.0'?>
    <stream:stream xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='1696998121'
    from='jabber.ru'
    version='1.0'
    xml:lang='en'>
    <stream:features>
    <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
    <compression xmlns='http://jabber.org/features/compress'><method>zlib</method>
    </compression>
    <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism>
    </mechanisms>
    <register xmlns='http://jabber.org/features/iq-register'/>
    </stream:features>
    </stream:stream>
    окей.. дальше отправляю второй пакет:
    Code:
     print $sock "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>";
     read($sock,$input,999);
     print ($input);
    и что я тут не менят, ответа от сервера нету =\
    />, \n, все что хочеш.., ответа нету =/

    помогите пожалуйста, кто знает в чем моя проблемма)



    p.s.: http://xmpp.org/ читал,
    через wireshark перехватил пакети.
    уже смотрел XML консоль в QIP'e.
    http://forum.jrudevels.org/viewtopic.php?p=12853


    p.p.s.:
    вот что я перехватил с помощью wireshark (пакети QIP'а):
    (зелений цвет - ответ сервера,
    красний цвет - пакет qip'а)

    [​IMG]

    первий пакет успешно отправляю (только конец пакета: "../>", а не "..>")
    ответ после первого тоже получаю, такой что нужно.

    второй пакет отправляю, а ответа нету =\
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    eLWAux Вся проблема в том как раз, что ты сразу закрываешь соединение с jabber сервером.

    <stream:stream to='jabber.ru' ..... /> Эквивалентно <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>) - будет ждать закрытия сокета и только тогда выведет результат
     
    _________________________
    CyberTro1n likes this.
  3. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Под XP не работает
     
    _________________________
  4. CyberTro1n

    CyberTro1n Well-Known Member

    Joined:
    20 Feb 2016
    Messages:
    862
    Likes Received:
    647
    Reputations:
    4
    Тема актуальна =) Спасибо, на win7 пашет.