• XSS.stack #1 – первый литературный журнал от юзеров форума

Как проверить открыт ли tcp порт

-IRON-

RAM
Пользователь
Регистрация
31.01.2008
Сообщения
104
Реакции
3
Сегодня пошарился по сайтам
php.net
php.su

Искал функцию для проверки открыт ли tcp port на удаленной машине. Не нашел.

Итак, что мне надо:
к примеру есть адрес 10.221.100.200. Нужно проверить открыт ли на нем порт например 1234. Действие происходит в городской локалке со скоростями 100 мбит.
Если известна такая функция php-подскажите.
 
хм..я когда-то тоже этим интересовалась.
А можно уточнить- чем плохи готовые сканеры портов? (некоторые с исходниками).
И методов то много...
 
Спасибо.
Вот что у меня вышло:
Код:
<?php
$fp = fsockopen("10.221.0.9", 4211);
if ($fp)   {
  	echo 'работает!';
  	fclose($fp);
  	} 
else {
echo 'ниработает!';
    }
?>
Заранее известно, что порт закрыт.
Результат скрипта:
Код:
Warning: fsockopen() [function.fsockopen]: unable to connect to 10.221.0.9:4211 (Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. ) in Z:\home\localhost\www\index.php on line 2
ниработает!
Можно отключить показ ворнингов, а можно ли как то еще решить траблу?

И еще вопрос. Я так понимаю, если не удалось законнектиться, то нет смысла производить fclose($fp); в конце?
 
Код:
<?php
$fp = @fsockopen("10.221.0.9", 4211);
if ($fp)   {
  echo 'работает!';
  fclose($fp);
  }
else {
echo 'ниработает!';
   }
?>
должно помочь, почитай про функцию fsockopen(), добавь таймаут
 
Код:
<?php
$fp = fsockopen("10.221.0.9", 4211, stream_set_timeout($fp, 15));
if ($fp)   {
  	echo 'работает!';
  	fclose($fp);
  	} 
else {
echo 'ниработает!';
    }
?>
Warning: stream_set_timeout(): supplied argument is not a valid stream resource in Z:\home\localhost\www\index.php on line 2

Warning: fsockopen() [function.fsockopen]: unable to connect to 10.221.0.9:4211 (Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. ) in Z:\home\localhost\www\index.php on line 2
ниработает!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вот так ставится таймаут
Код:
$fp = fsockopen("10.221.0.9", 4211, $errno, $errstr, 5);
Для выполнения
Код:
stream_set_timeout($fp, 15)
нужно чтоб в $fp был хендл открытого соединения, а у тебя там его еще нет.

А ворненг на то и ворненг чтоб предупреждать о чем-то. Либо смотри его, либо подавляй (собакой например)
Код:
$fp = @fsockopen("10.221.0.9", 4211, $errno, $errstr, 5);
 
Код:
$fp = fsockopen("10.221.0.9", 4211, $errno, $errstr, 5);
Тогда исчо непонятный мне момент. Если писать в вызове функции в параметрах
Код:
$errno, $errstr,
это типа значит что эти параметры по дефолтам, но нужен параметр что идет за ними и о них тоже нужно упомянуть. Так?
 
-IRON-
Конечно. Функция может принимать аргументы только в установленном порядке. Не будет же она гадать, для чего ты там поставил этот аргумент.
Ты можешь указывать так:
Код:
$fp = fsockopen("10.221.0.9", 4211, $errno, $errstr, 5);
или
$fp = fsockopen("10.221.0.9", 4211, $errno, $errstr);
или
$fp = fsockopen("10.221.0.9", 4211, $errno);
или
$fp = fsockopen("10.221.0.9", 4211);
Это явление называется полиморфизмом.
 
глобально показ ошибок вырубаеться примерно так:
Код:
<?php
error_reporting(0);
//дальше твой код
?>
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх