Autor Tema: [src] Comprobar si un puerto esta abierto  (Leído 5271 veces)

0 Usuarios y 1 Visitante están viendo este tema.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
[src] Comprobar si un puerto esta abierto
« en: Febrero 18, 2010, 06:28:43 pm »
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:
Código: (php) [Seleccionar]
<?
    /*    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!
« última modificación: Febrero 21, 2010, 03:16:02 am por coco »
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:[src] Comprobar si un puerto esta abierto
« Respuesta #1 en: Febrero 20, 2010, 12:09:06 am »
Muy educativo! la verdad es entretenido aprender asi!

Che, por una cuestion logica esto no deberia ser asi?

Código: [Seleccionar]
if ($_POST['dest_port'] && $_POST) {
       
        $fhandle = @fsockopen($host, $port, $errno, $errstr, $timeout);
        if ($fhandle) {
             fclose ($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.)";
        }
    }

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:[src] Comprobar si un puerto esta abierto
« Respuesta #2 en: Febrero 20, 2010, 12:23:10 am »
Muy educativo! la verdad es entretenido aprender asi!

Che, por una cuestion logica esto no deberia ser asi?

Código: [Seleccionar]
if ($_POST['dest_port'] && $_POST) {
       
        $fhandle = @fsockopen($host, $port, $errno, $errstr, $timeout);
        if ($fhandle) {
             fclose ($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.)";
        }
    }

vos sabes que no me fije... pero creo que no.. de todas formas si queres cerrar un handle q no existe, no pasa nada
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:[src] Comprobar si un puerto esta abierto
« Respuesta #3 en: Febrero 20, 2010, 12:28:45 am »
hahahah por eso decia por una cuestion LOGICA, cerrar un handle que no esta abierto es como... "limpiarte el culo sin haber cagado" xD

Fuera de chiste ahora, si por ejemplo... pones un loop y abris handles como loco, que pasa?

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:[src] Comprobar si un puerto esta abierto
« Respuesta #4 en: Febrero 20, 2010, 10:20:14 am »
hahahah por eso decia por una cuestion LOGICA, cerrar un handle que no esta abierto es como... "limpiarte el culo sin haber cagado" xD

Fuera de chiste ahora, si por ejemplo... pones un loop y abris handles como loco, que pasa?

proba. cuando excede el tiempo maximo de ejecucion por script, te va a tirar una pagina en blanco o bien un error de fuera de memoria

saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

VanHan

  • Bytes
  • *
  • Mensajes: 23
  • Reputación: +3/-3
  • .:: [ vHn ] ::.
    • Ver Perfil
    • [VanHan WebSite]
Re:[src] Comprobar si un puerto esta abierto
« Respuesta #5 en: Febrero 25, 2010, 12:39:55 am »
Muy Interesante  8)

Salu2
[vHn]
.:: I'm GeeK ::.