У меня есть сценарий, который сканирует порты для серверов открытого прокси. Проблема состоит в том, если она встречается с программой входа в систему (конкретно telnet) затем, она зависает там навсегда, так как она не знает, что сделать, и в конечном счете сервер закрывает соединение.
Простое решение состояло бы в том, чтобы создать набор случаев. Если telnet, сделайте это. Если SSH, сделайте это. Если что-то еще, и тому подобное. Я хотел бы решение для зонтика, так как сценарий не является высоким приоритетом для меня.
Сценарий, как это теперь, доступен по http://parkrrr.net/socks/scan.phps
На мелком масштабе (страница, возможно, средние числа 15 хитов/день) это прекрасно, но в более крупном масштабе я был бы взволнован по поводу большого количества открытых сокетов зомби.
Свопинг! $strpos не работает, так как серверы могут возвратить больше информации, чем, что Вы запросили (заголовки, реклама, и т.д.).
Только принятие постоянного числа байтов (в противоположность добавлению до EOF, который это делает теперь) от $fgets также, кажется, не работает. Я уверен, что это - то, где это застревает: в то время как (! feof ($fp)) {$data. = fgets ($fp, 512);}
Но что я могу сделать? Любые другие предложения/предупреждения также были бы одобрены.
Используйте неблокирующие сокеты и stream_select
с таймаутом или прямым опросом.
Используйте stream_set_timeout для установки таймаута чтения/записи на сокете.