2010-02-09 17 views

Respuesta

63

no estoy seguro de lo que entendemos por ser "transmitido correctamente", pero esperemos que este ejemplo va a hacer el truco:

$host = 'stackoverflow.com'; 
$ports = array(21, 25, 80, 81, 110, 443, 3306); 

foreach ($ports as $port) 
{ 
    $connection = @fsockopen($host, $port); 

    if (is_resource($connection)) 
    { 
     echo '<h2>' . $host . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.</h2>' . "\n"; 

     fclose($connection); 
    } 

    else 
    { 
     echo '<h2>' . $host . ':' . $port . ' is not responding.</h2>' . "\n"; 
    } 
} 

Salida:

stackoverflow.com:21 is not responding. 
stackoverflow.com:25 is not responding. 
stackoverflow.com:80 (http) is open. 
stackoverflow.com:81 is not responding. 
stackoverflow.com:110 is not responding. 
stackoverflow.com:443 is not responding. 
stackoverflow.com:3306 is not responding. 

Ver http://www.iana.org/assignments/port-numbers para obtener una lista completa de los números de puerto.

+0

Gracias - esto es muy similar a lo que esperaba hacer. Cuando dije "reenviado correctamente" quise decir que el usuario tiene el reenvío de puertos habilitado en su enrutador para el puerto que deseo utilizar. Tengo un juego multijugador que tiene la opción de actuar como servidor. Por lo tanto, el reenvío de puertos es necesario y nos gustaría tener una característica simple que intente verificar que el puerto, de hecho, se reenvía. –

+2

¿Estoy en lo cierto al pensar que esto prueba su salida y los receptores entrantes, por lo que si desea escribir una función para simplemente probar su salida, necesita encontrar un servidor público con todos los puertos entrantes abiertos? – Programster

+0

increíble solución. (y) – Bhavin

Cuestiones relacionadas