![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Задача - организовать провеку сокета на работоспособность т.е. идет ли к нему подключение и передача данных, для проверки автообновления.
Организовал так, в целом вроде все работает, но проскакивают и не рабочие варианты, в чем проблема и как следует дополнить код? |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Странно, не кто не знает решения данной задачи? :(
не верю... |
|||
|
||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
По тому, что не правильно сформирован вопрос.
Что за сокет? Из кода я вижу, что udp, причем на нем висит какой-то http-сервер. А в чем проблема? В том, что часто пишет нерабочие хосты или рабочие пишет в сломанные? Если первое, то тут просто может быть закрыт доступ на листинг / директории |
|||
|
||||
| BuShaRt |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Хотелось бы чтоб проверка была универсальной и не ужели это важно, что висит на данном сокете?
Пропускает с ярлыком "work" нерабочие иногда.
Хм, а как сокеты с этим связанны? Это сообщение отредактировал(а) BuShaRt - 3.6.2007, 13:38 |
||||
|
|||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
BuShaRt, связанно именно тем, что вы шлете <b>HTTP</b>-заголовок
Если это http-прокси или http-сервер, то вроде все будет и не очень плохо, но в случае с проксей не обязательно заработает Потом лучше использовать проверку с типом, те !== на то, что произошел таймаут ну и вконце-концов может не пускать на сокет не только из-за таймаута |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Это потому, что я собиралс скрипт из примеров, по суте не очень хорошо разбираясь в сокетах. Я думаю, тогда стоит отбросить код, представленный мной... Вы не могли бы рассказать, оптимальный алгоритм проверки сокетов? (можно и без примера на PHP). Пока перепишу, хоть подробние в сокетах рабзерусь. |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Я опять не точно выразил мысль?
|
|||
|
||||
| CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Возможно я ошибаюсь, но протокол в имени хоста никогда не указывался и не указывается. На это есть порт. |
|||
|
||||
| CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Мб нечто этого, а то что ты написал - фигня помоему. Если хост отвечает, он и так вернет какой-нибудь ответ, соответственно в твоем случае можно кром проверки коннекта ничего не делать. В моем скрипте нужно прописать тест для разных портов, для 80 я сам написал |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
CyClon,
у, как все сложно... А где то может есть, где почитать про разные порты? Их ведь по моему куча разных :( |
|||
|
||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
Сколько портов, столько и протоколов, если не больше
Читай RFC. http://www.rfc-editor.org/ В самом общем случае достаточно просто попробовать с определенным портом соединиться - те проверить открыт он или нет. А проверка на работоспособность каждого сервиса висящего на порту - это занятие утомительное и бессмысленное. Лучше запрограммировать нужные для проверки сервисы и если очень хочется сделать систему плагинов (допустим xml-описание действий нужных для проверки работоспособности протокола), чтобы быстро добавлять для проверки новые порты. |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
А на сколько логично будет, попробывать записать данные на порт, потом считать эти данные и если получилось объявить порт рабочим?
Добавлено через 1 минуту и 26 секунд |
|||
|
||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
BuShaRt, обычно используются комманды типа HELO или какая-то последовательность байтов для кажого протокола, чтобы определить, что это он, по этому писать ахинею не катит
|
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
WolfON,
Получаеться, чтоб написать универсальный чикед, нужно организоваться не одну сотную строк кода? и задача достаточно кропотливая? |
|||
|
||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
BuShaRt, более чем много, но как правило достаточно проверить порт на то открыт он или нет и свериться по базе портов к какому он сервису пренадлежит
|
|||
|
||||
| WIPS |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 22.5.2006 Где: Украина, Киев Репутация: 1 Всего: 8 |
Чтобы объявить порт рабочим достаточно создать сделать так (http://www.php.net/manual/en/function.fsockopen.php):
Вопрос в том запущена ли на удаленной машине служба по этому порту (в данном примере НТТР сервер, хотя не обязательно), т.е. слушает ли кто-то этот порт.
Что значит универсальный, кот. проверяет все порты? --------------------
Автопроизводители, машины, марки, модели! |
||||||
|
|||||||
| BuShaRt |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Виснит данный код, на нерабочих портах
Поясните пожалуста. Универсальный т.е. способный проверить порт любого назначения, а не все подряд на одной машине. Хотя по суте задачи не отличаються, второй случае требует первого и усложняеться лишь циклом. |
||||
|
|||||
| WIPS |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 22.5.2006 Где: Украина, Киев Репутация: 1 Всего: 8 |
Сам по себе сокет ответ прислать не может (он и не существует то в принципе), он только средство доставки. Адрес указывает на какой машине находится получатель, а порт впринципе идентифицирует получателя в пределах этой машины. Так вот, для доставки сообщений, или хотя бы установления соединения должен быть отправитель (твой скрипт) и естественно получатель. Получатель - это программа (служба, сервис, демон и т.п.), кот. будет время от времени или по сигналу от ОС проверять сокет по своему порту - не пришло ли чего (слушать порт) и может быть отвечать (писать, что-то в сокет). Вот и выходит, что если получателя не будет, то и установить соединение ты не сможешь (что в принципе архилогично). У порта в принципе нет назначения. Можно написать свой FTP сервер, кот. будет слушать не 21 (как принято для FTP), а 80 порт (как принято для HTTP) и все будет прекрасно работать. То, что напр. 80-й порт для HTTP серверов - это как бы традиция, просто так принято, как бы по умолчанию. Так, что для проверки порта любого назначения придется перебрать все порты от 1 до 65535 А если так:
--------------------
Автопроизводители, машины, марки, модели! |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
WIPS,
Спасибо за разьяснение, но код все равно виснит, да и второй вариант нечем от перого толком не отличаеться. К тому же мой вариант поточнее наверно будет. |
|||
|
||||
| WIPS |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 22.5.2006 Где: Украина, Киев Репутация: 1 Всего: 8 |
Согласен, попробуй так:
В смысле поточнее? Это сообщение отредактировал(а) WIPS - 5.6.2007, 13:21 --------------------
Автопроизводители, машины, марки, модели! |
||||
|
|||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
BuShaRt, виснет из-за большого таймаута вестимо
|
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
WolfON,
Не, если вручную таймаут не ловить, виснит в любом случае |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Пример, того, что бы я хотел получить в итоге (функционал тот же), и при этом достаточно буде чикать только 4-ые соксы
Урл на пример Добавлено через 31 секунду теперь вроде вопрос сформулирован на все 100% Добавлено через 6 минут и 48 секунд + мне не надо подробностей, мне надо только "work", "no work"... загуглить сложно, битый час гуглю... только дампы соксов тонами пролистываю... а инфы нуль :( |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
не гуглиться не в какуюю.... тока нашел готовый скрипт за 100$ спамирской рассылки, в которой есть данный алгоритм, как модуль... если честно 100$ жалко тему надо апать, вдруг кто-то да знает |
|||
|
||||
| sTa1kEr |
|
||||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Т.е. ваш код не виснет, а этот виснет? Хм... Очень странно, т.к. единственное отличие в них, это то что у вас используется UDP протокол...
Надо было с этого и начинать
Т.е. если прокси вернул от ya.ru OK - то проксик рабочий. |
||||
|
|||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
sTa1kEr,
Хм, интереснй подход... протестирую вечером. |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
sTa1kEr,
В целом идея хорошая, наверно именно то, что и нужно, но код не работает... Т.е. он отбраковывает порты, которые работаю, при тестирование вручную. Есть подозрения на эту строку, она точно должна выглядить так?
Добавлено через 10 минут и 50 секунд хотя с другой стороны 129.237.161.194:8888 выдает GOOD |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
при этом Online Proxy Checker говорит, что
мистика? |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Не точно, это был лишь пример. Возможно, что проксик выдал свою страничку (что нибудь вроде "прокси сервер временно не доступен") с 200ом кодом. Можно посылать запрос не на левые сайты, а на свой скрипт, который проанализирует заголовки от прокси и выдаст информацию (к примеру какой-нить уникальный ключ) по которой можно со 100%-ой увереностью сказать, что прокси рабочий. |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
sTa1kEr,
а нечего если прокси-чикер и файл генирирующий ответ будут на одном домене? |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
||||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |