ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

27.03.2009, 20:03
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
Ну вот опять тажа проблема, что и вначале - немогу послать второй пакет, тоестья его ослал но ответа не вижу
PHP код:
<?php
$JABBER_SERVER = "jabber.ru";
$PORT = 5222;
$i=0;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if(!$socket) { echo 'soket open - NO'; exit; } else { echo 'socket open - OK<br>'; }
$connect = socket_connect($socket, $JABBER_SERVER, $PORT);
if(!$connect) { echo 'soket connect - NO'; exit; } else { echo 'socket connect - OK<br>'; }
$t = "<stream:stream to='jabber.ru' xmlns='jabber:client' ";
$t .= "xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'/> ";
echo '<b>Клиент - </b>'.htmlspecialchars($t).'<br><br>';
socket_write($socket, $t);
while (1) {
$read=array($socket);
$count=socket_select($read,$write=null,$exception= null,1);
// Если ничего не пришло пропускаем
// Или если нужно что то послать по собственному желанию - отправляем
if ($i++ > 5) break; // Соединение оборвется через 5 секунд или 5 принятых пакетов
if ($count<1) continue;
foreach ($read as $one) { $input=socket_read($one,4096);
// Тут обработка принятого пакета
// например если пришел пакет stream features ответить пакетом начала SASL авторизации
echo '<b>Ответ от jabber - </b>'.htmlspecialchars($input)."<br><br>";
}
}
$t2 = "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5' />";
echo '<b>Клиент - </b>'.htmlspecialchars($t2).'<br><br>';
socket_write($socket, $t2);
while (1) { $read=array($socket); $count=socket_select($read,$write=null,$exception= null,1);
// Если ничего не пришло пропускаем
// Или если нужно что то послать по собственному желанию - отправляем
if ($i++ > 5) break; // Соединение оборвется через 5 секунд или 5 принятых пакетов
if ($count<1) continue; foreach ($read as $one) { $input=socket_read($one,4096);
// Тут обработка принятого пакета
// например если пришел пакет stream features ответить пакетом начала SASL авторизации
echo '<b>Ответ от jabber - </b>'.htmlspecialchars($input)."<br><br>";
}
}
?>
Вот что выводтся в браузере
socket open - OK
socket connect - OK
Клиент - <stream:stream to='jabber.ru' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'/>
Ответ от jabber - <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='2125564970' from='jabber.ru' version='1.0' xml:lang='en'><stream:features><starttls xmlns='urn:ietf  arams:xml:ns:xmpp-tls'/><compression xmlns='http://jabber.org/features/compress'><method>zlib</method></compression><mechanisms xmlns='urn:ietf  arams:xml:ns:xmpp-sasl'><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism></mechanisms><register xmlns='http://jabber.org/features/iq-register'/></stream:features></stream:stream>
Ответ от jabber -
Ответ от jabber -
Ответ от jabber -
Ответ от jabber -
Ответ от jabber -
Клиент - <auth xmlns='urn:ietf  arams:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5' />
|
|
|

27.03.2009, 20:18
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
|
|
|

27.03.2009, 20:38
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
ПРичем тут ob_implicit_flush();...
В холостую идет чтение опять......
|
|
|

27.03.2009, 20:50
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
Krist_ALL Господи, что Вы делаете. Цикл обработки будет один! не надо его копипастить сто тыщ раз. Я специально комментарий оставил где должна быть обработка. Объясняю, на том месте должно быть что-то вроде:
PHP код:
if (strpos($input,'stream:features')!==false)
{
отправить пакет на запрос SASL авторизации
}
И второе - почитайте спецификацию. НЕЛЬЗЯ закрывать тэг <stream:stream> если вы не хотите закрыть соединение. Ака:
PHP код:
$t = "<stream:stream to='jabber.ru' xmlns='jabber:client' ";
$t .= "xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'/> ";
"/>" Считается закрытием тэга. Уберите слеш
Последний раз редактировалось Gifts; 27.03.2009 в 20:54..
|
|
|

27.03.2009, 20:51
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
PHP код:
<?php
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
@ini_set("display_errors","1");
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
$JABBER_SERVER = "jabber.ru";
$PORT = 5222;
$i=0;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if(!$socket) { echo 'soket open - NO'; exit; } else { echo 'socket open - OK<br>'; }
$connect = socket_connect($socket, $JABBER_SERVER, $PORT);
if(!$connect) { echo 'soket connect - NO'; exit; } else { echo 'socket connect - OK<br>'; }
$t = "<stream:stream to='jabber.ru' xmlns='jabber:client' ";
$t .= "xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'/> ";
echo '<b>Клиент - </b>'.htmlspecialchars($t).'<br><br>';
socket_write($socket, $t);
while (1) {
$read=array($socket);
$count=socket_select($read,$write=null,$exception= null,1);
// Если ничего не пришло пропускаем
// Или если нужно что то послать по собственному желанию - отправляем
if ($i++ > 5) break; // Соединение оборвется через 5 секунд или 5 принятых пакетов
if ($count<1) continue;
foreach ($read as $one) {
$input=socket_read($one,4096);
if (!empty($input)) {
// Тут обработка принятого пакета
// например если пришел пакет stream features ответить пакетом начала SASL авторизации
echo '<b>Ответ от jabber - </b>'.htmlspecialchars($input)."<br><br>";
}
}
}
$t2 = "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5' />";
echo '<b>Клиент - </b>'.htmlspecialchars($t2).'<br><br>';
socket_write($socket, $t2);
while (1) { $read=array($socket); $count=socket_select($read,$write=null,$exception= null,1);
// Если ничего не пришло пропускаем
// Или если нужно что то послать по собственному желанию - отправляем
if ($i++ > 5) break; // Соединение оборвется через 5 секунд или 5 принятых пакетов
if ($count<1) continue; foreach ($read as $one) { $input=socket_read($one,4096);
if (!empty($input)) {
// Тут обработка принятого пакета
// например если пришел пакет stream features ответить пакетом начала SASL авторизации
echo '<b>Ответ от jabber - </b>'.htmlspecialchars($input)."<br><br>";
}
}
}
?>
if (!empty($input)) {
тогда выводим ответ
}
Последний раз редактировалось Pashkela; 27.03.2009 в 20:55..
|
|
|

27.03.2009, 21:00
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
Pashkela Он будет всегда не empty, если соединение есть (связано с обработкой socket_select). Скорее надо проверять обратное:
PHP код:
if(empty($input)) die('Соединение разорвано');
|
|
|

27.03.2009, 21:07
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
не всегда, как видно, я потестил у себя, ответов иногда разное кол-во, в зависимости от того, какое соединение, банально F5 несколько раз и сразу видно результат
|
|
|

27.03.2009, 21:29
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
В общем, должно выглядеть почти так.
PHP код:
<?
$JABBER_SERVER = "jabber.ru";
$PORT = 5222;
$i=0;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if(!$socket) { echo 'soket open - NO'; exit; } else { echo 'socket open - OK<br>'; }
$connect = socket_connect($socket, $JABBER_SERVER, $PORT);
if(!$connect) { echo 'soket connect - NO'; exit; } else { echo 'socket connect - OK<br>'; }
$t = "<stream:stream to='jabber.ru' xmlns='jabber:client' ";
$t .= "xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'>";
echo '<b>Клиент - </b>'.htmlspecialchars($t).'<br><br>';
socket_write($socket, $t);
while (1) {
$read=array($socket);
$count=socket_select($read,$write=null,$exception=null,1);
// Если ничего не пришло пропускаем
// Или если нужно что то послать по собственному желанию - отправляем
if ($i++ > 10) break; // Соединение оборвется через 5 секунд или 5 принятых пакетов
if ($count<1) continue;
foreach ($read as $one) {
$input=socket_read($one,4096);
if (empty($input)) die('Соединение разорвано');
echo '<b>Ответ от jabber - </b>'.htmlspecialchars($input)."<br><br>";
if (stripos($input,'stream:feature')!==false)
{
$t="<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5' />";
socket_write($one,$t);echo '<b>Клиент - </b>'.htmlspecialchars($t).'<br><br>';
}
if (stripos($input,'challenge')!==false)
{
echo '<br/><br/> А теперь разгадывай челленджы сасла: '.htmlspecialchars(base64_decode(strip_tags($input)));
}
}
}
|
|
|

27.03.2009, 21:40
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
спаСИБО ОГРОМНОЕЙ !
|
|
|

27.03.2009, 21:40
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
спаСИБО ОГРОМНОЕЙ !но на этом я не закончу-завтра продолжу. Всем спасибо!
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Books
|
PSalm69 |
Избранное |
273 |
13.02.2016 01:24 |
|
Books PHP
|
FRAGNATIC |
PHP |
186 |
21.02.2010 02:41 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|