Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка сокетов. 
:(
    Опции темы
WIPS
Дата 5.6.2007, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(BuShaRt @  4.6.2007,  14:15 Найти цитируемый пост)
А на сколько логично будет, попробывать записать данные на порт, потом считать эти данные и если получилось объявить порт рабочим?

Чтобы объявить порт рабочим достаточно создать сделать так (http://www.php.net/manual/en/function.fsockopen.php):
Код

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) 
    echo "$errstr ($errno)<br />\n"; // нерабочий
else 
    echo "OK\n";                               // рабочий

Вопрос в том запущена ли на удаленной машине служба по этому порту (в данном примере НТТР сервер, хотя не обязательно), т.е. слушает ли кто-то этот порт.

Цитата(BuShaRt @  4.6.2007,  22:08 Найти цитируемый пост)
Получаеться, чтоб написать универсальный чикед, нужно организоваться не одну сотную строк кода? и задача достаточно кропотливая? 

Что значит универсальный, кот. проверяет все порты?
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
BuShaRt
Дата 5.6.2007, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Цитата(WIPS @  5.6.2007,  01:16 Найти цитируемый пост)
тобы объявить порт рабочим достаточно создать сделать так (http://www.php.net/manual/en/function.fsockopen.php):

Виснит данный код, на нерабочих портах smile


Цитата(WIPS @  5.6.2007,  01:16 Найти цитируемый пост)
Вопрос в том запущена ли на удаленной машине служба по этому порту (в данном примере НТТР сервер, хотя не обязательно), т.е. слушает ли кто-то этот порт.

Поясните пожалуста.


Цитата(WIPS @  5.6.2007,  01:16 Найти цитируемый пост)
Что значит универсальный, кот. проверяет все порты?

Универсальный т.е. способный проверить порт любого назначения, а не все подряд на одной машине. Хотя по суте задачи не отличаються, второй случае требует первого и усложняеться лишь циклом.

PM MAIL   Вверх
WIPS
Дата 5.6.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(BuShaRt @  5.6.2007,  03:02 Найти цитируемый пост)
Цитата(WIPS @  5.6.2007,  01:16 Найти цитируемый пост)
Вопрос в том запущена ли на удаленной машине служба по этому порту (в данном примере НТТР сервер, хотя не обязательно), т.е. слушает ли кто-то этот порт.

Поясните пожалуста.

Сам по себе сокет ответ прислать не может (он и не существует то в принципе), он только средство доставки. Адрес указывает на какой машине находится получатель, а порт впринципе идентифицирует получателя в пределах этой машины. Так вот, для доставки сообщений, или хотя бы установления соединения должен быть отправитель (твой скрипт) и естественно получатель. Получатель - это программа (служба, сервис, демон и т.п.), кот. будет время от времени или по сигналу от ОС проверять сокет по своему порту - не пришло ли чего (слушать порт) и может быть отвечать (писать, что-то в сокет). Вот и выходит, что если получателя не будет, то и установить соединение ты не сможешь (что в принципе архилогично).

Цитата(BuShaRt @  5.6.2007,  03:02 Найти цитируемый пост)
Универсальный т.е. способный проверить порт любого назначения, а не все подряд на одной машине. Хотя по суте задачи не отличаються, второй случае требует первого и усложняеться лишь циклом.

У порта в принципе нет назначения. Можно написать свой FTP сервер, кот. будет слушать не 21 (как принято для FTP), а 80 порт (как принято для HTTP) и все будет прекрасно работать. То, что напр. 80-й порт для HTTP серверов - это как бы традиция, просто так принято, как бы по умолчанию. Так, что для проверки порта любого назначения придется перебрать все порты от 1 до 65535 smile

Цитата(BuShaRt @  5.6.2007,  03:02 Найти цитируемый пост)
Виснит данный код, на нерабочих портах smile

А если так:
Код

$fp = @fsockopen("www.example.com", 80, $errno, $errstr, 1);
if (!$fp) 
    echo "$errstr ($errno)<br />\n"; // нерабочий
else 
    echo "OK\n";                               // рабочий

--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
BuShaRt
Дата 5.6.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



WIPS
Спасибо за разьяснение, но код все равно виснит, да и второй вариант нечем от перого толком не отличаеться.
К тому же мой вариант поточнее наверно будет.
PM MAIL   Вверх
WIPS
Дата 5.6.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Цитата(BuShaRt @  5.6.2007,  10:50 Найти цитируемый пост)
Спасибо за разьяснение, но код все равно виснит, да и второй вариант нечем от перого толком не отличаеться.

Согласен, попробуй так:
Код

        $socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if ($socket === false)
        {
            echo socket_strerror(socket_last_error());
            exit;
        }
        $result = @socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
        if ($result === false)
        {
            echo socket_strerror(socket_last_error());
            exit;
        }
        $result = @socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 5, "usec" => 0));
        if ($result === false)
        {
            echo socket_strerror(socket_last_error());
            exit;
        }
        $result = @socket_connect($socket, $ip, $port);        
        if ($result === false)
        {
            echo socket_strerror(socket_last_error());
            exit;
        }        
        $foo = 1;
        $result = @socket_write($socket, $foo, strlen($foo));
        if ($result === false)
        {
            echo socket_strerror(socket_last_error());
            exit;
        }
        // закрываем все это дело
        $result = @socket_shutdown($socket, 2);
        if ($result === false)
        {
            echo socket_strerror(socket_last_error());
            exit;
        }
        $result = @socket_close($socket);
        if ($result === false)
        {
            echo socket_strerror(socket_last_error());
            exit;
        }

Цитата(BuShaRt @  5.6.2007,  10:50 Найти цитируемый пост)
К тому же мой вариант поточнее наверно будет. 

В смысле поточнее?


Это сообщение отредактировал(а) WIPS - 5.6.2007, 13:21
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
WolfON
Дата 5.6.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 6
Всего: 8



BuShaRt, виснет из-за большого таймаута вестимо
PM MAIL ICQ   Вверх
BuShaRt
Дата 5.6.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



WolfON
Не, если вручную таймаут не ловить, виснит в любом случае smile
PM MAIL   Вверх
BuShaRt
Дата 12.6.2007, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Пример, того, что бы я хотел получить в итоге (функционал тот же), и при этом достаточно буде чикать только 4-ые соксы smile

Урл на пример smile

Добавлено через 31 секунду
 smile 
теперь вроде вопрос сформулирован на все 100% smile)

Добавлено через 6 минут и 48 секунд
+ мне не надо подробностей, мне надо только "work", "no work"...

загуглить сложно, битый час гуглю... только дампы соксов тонами пролистываю... а инфы нуль :(
PM MAIL   Вверх
BuShaRt
Дата 13.6.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



 smile 
не гуглиться не в какуюю.... тока нашел готовый скрипт за 100$ спамирской рассылки, в которой есть данный алгоритм, как модуль... если честно 100$ жалко smile
тему надо апать, вдруг кто-то да знает
PM MAIL   Вверх
sTa1kEr
Дата 13.6.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(BuShaRt @  5.6.2007,  04:02 Найти цитируемый пост)
Виснит данный код, на нерабочих портах smile

Т.е. ваш код не виснет, а этот виснет? Хм... Очень странно, т.к. единственное отличие в них, это то что у вас используется UDP протокол...
Цитата(BuShaRt @  12.6.2007,  21:55 Найти цитируемый пост)
Пример, того, что бы я хотел получить в итоге (функционал тот же), и при этом достаточно буде чикать только 4-ые соксы smile

Надо было с этого и начинать smile Вот простейший пример проверки прокси:
Код

$proxy = "129.237.161.194";
$port = 8888;

$r = @fsockopen($proxy, $port, $errno, $errstr, 10);
if (!$r)
{
   echo "$proxy:$port - Bad\n";
}
else
{
   fputs($r, "GET http://ya.ru/ HTTP/1.1\r\n"."Accept: */*\r\nnAccept-Language: en-us\r\nPragma: no-cache\r\nUser-Agent: Monzilla/4.0 (compatible; MSIE 6.0)\r\nHost: ya.ru\r\n" ."Connection: Close\r\n\r\n");
   if (fgets($r, 16) == "HTTP/1.1 200 OK")
   {
      echo "$proxy:$port - Good\n";
   }
   else
   {
      echo "$proxy:$port - Bad\n";
   }
   fclose($r);
}

Т.е. если прокси вернул от ya.ru OK - то проксик рабочий.
PM MAIL   Вверх
BuShaRt
Дата 13.6.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



sTa1kEr
Хм, интереснй подход... протестирую вечером.
PM MAIL   Вверх
BuShaRt
Дата 19.6.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



sTa1kEr
В целом идея хорошая, наверно именно то, что и нужно, но код не работает...
Т.е. он отбраковывает порты, которые работаю, при тестирование вручную.

Есть подозрения на эту строку, она точно должна выглядить так?

Код

if (fgets($r, 16) == "HTTP/1.1 200 OK")


Добавлено через 10 минут и 50 секунд
хотя с другой стороны 
129.237.161.194:8888
выдает GOOD
PM MAIL   Вверх
BuShaRt
Дата 19.6.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



при этом Online Proxy Checker говорит, что 
Код

129.237.161.194:8888    SOCKS 4: proxy does not work!*


мистика?
PM MAIL   Вверх
sTa1kEr
Дата 19.6.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(BuShaRt @  19.6.2007,  12:20 Найти цитируемый пост)
Есть подозрения на эту строку, она точно должна выглядить так?

Не точно, это был лишь пример. Возможно, что проксик выдал свою страничку (что нибудь вроде "прокси сервер временно не доступен") с 200ом кодом.
Можно посылать запрос не на левые сайты, а на свой скрипт, который проанализирует заголовки от прокси и выдаст информацию (к примеру какой-нить уникальный ключ) по которой можно со 100%-ой увереностью сказать, что прокси рабочий.
PM MAIL   Вверх
BuShaRt
Дата 19.6.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



sTa1kEr
а нечего если прокси-чикер и файл генирирующий ответ будут на одном домене?smile
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1340 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.