Как я вижу, застревает ли установленный сокет на сервере, это ожидает вход?

У меня есть сценарий, который сканирует порты для серверов открытого прокси. Проблема состоит в том, если она встречается с программой входа в систему (конкретно telnet) затем, она зависает там навсегда, так как она не знает, что сделать, и в конечном счете сервер закрывает соединение.

Простое решение состояло бы в том, чтобы создать набор случаев. Если telnet, сделайте это. Если SSH, сделайте это. Если что-то еще, и тому подобное. Я хотел бы решение для зонтика, так как сценарий не является высоким приоритетом для меня.

Сценарий, как это теперь, доступен по http://parkrrr.net/socks/scan.phps

На мелком масштабе (страница, возможно, средние числа 15 хитов/день) это прекрасно, но в более крупном масштабе я был бы взволнован по поводу большого количества открытых сокетов зомби.

Свопинг! $strpos не работает, так как серверы могут возвратить больше информации, чем, что Вы запросили (заголовки, реклама, и т.д.).

Только принятие постоянного числа байтов (в противоположность добавлению до EOF, который это делает теперь) от $fgets также, кажется, не работает. Я уверен, что это - то, где это застревает: в то время как (! feof ($fp)) {$data. = fgets ($fp, 512);}

Но что я могу сделать? Любые другие предложения/предупреждения также были бы одобрены.

1
задан Parker 5 June 2010 в 06:34
поделиться

2 ответа

Используйте неблокирующие сокеты и stream_select с таймаутом или прямым опросом.

1
ответ дан 3 September 2019 в 00:02
поделиться

Используйте stream_set_timeout для установки таймаута чтения/записи на сокете.

1
ответ дан 3 September 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: