Para desvirgar este nuevo sub foro, les traigo un script que hice yo para ver si un puerto esta abierto. Consta simplemente en abrir una conexion con sockets al puerto deseado y especificar un timeout. Conviene usar un timeout relativamente bajo, ya que si le pones mucho, te va a tardar un huevo en decirte "ESTA CERRADO". Bueno vamos al codigo:
<?
/* Cocus Source Code: Port Checker
Last Rev: 18/feb/2010
References: fsockopen, fclose
*/
$timeout = 5; //segundos
$host = $_SERVER['REMOTE_HOST']; //remote host
$port = (int) $_POST['dest_port']; //puerto
if ($_POST['dest_port'] && $_POST) {
$fhandle = @fsockopen($host, $port, $errno, $errstr, $timeout);
if ($fhandle) {
$result = "El puerto '$port' en '$host' se encuentra abierto.";
} else {
$result = "El puerto '$port' en '$host' no se encuentra abierto. (Error N: $errno. Descripcion: $errstr.)";
}
fclose ($fhandle);
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>IP Checker</title>
<style type="text/css">
body {
font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Grande", "Lucida Sans", Arial, sans-serif ;
}
#wrapper {
position:absolute;
top:0px;
left:0px;
width:100%;
height:100%;
background-color:black;
}
#maindiv {
position: absolute;
left: 50%;
top: 50%;
height: 120px;
width: 220px;
margin-top: -60px;
margin-left: -110px;
background-color: #C0C0C0;
border: 1px white solid;
}
</style>
</head>
<body>
<div id="wrapper">
<div id="maindiv">
<form action="<? echo($_SERVER['PHP_SELF']); ?>" method="POST">
<label id="lblPort">IP:</label>
<input name="ip" disabled="disabled" type="text" value="<? echo($host);?>" /><br />
<label id="lblPort">Puerto:</label>
<input name="dest_port" maxlength="5" type="text" /><br /><? if ($result) { echo($result); } ?><br />
<input name="submit" type="submit" value="Checkear" />
</form>
</div>
</div>
</body>
</html>
Hay algunos tips que no se ven siempre, pero que los estoy usando, por ejemplo el (int) $var; esto indica que tipo de variable va a admitir, si tenemos una variable del tipo string, solamente va a utilizar los numeros que esta contenga. Es una onda CInt de VB.
Despues, uso el $_POST['dest_port'] && $_POST, donde los && representan AND (|| es OR). En este caso, estoy haciendo 2 comparaciones a la vez, estoy fijandome si se efectuo el POST (comprobando si el array $_POST existe) y comprobando el valor de un item del post (dest_port).
Y por ultimo, pero quizas conocido, el @ al principio de una funcion. Para hacerlo mas simple, es muy similar al On Error Resume Next, solamente que se aplica a las funciones que tengan el @ al principio. En este caso lo uso porque la funcion fsockopen puede estar deshabilitada.
Saludos!