• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

djthyrax

[PHP]Disponibilidade de um host

10 mensagens neste tópico

Este código meu foi escrito originalmente para um bot em PHP para o dAmn. Substituí as funções específicas de output do bot por echo's. :P

O $triggerchar contêm o caracter "único" do bot para executar um comando, o $argumentsF é tudo passado a seguir ao $triggerchar e do nome do comando, o $arguments é um explode(" ", $argumentsF);

$error=array(); // Custom error handling
$error[0]="Invalid host";
$error[10060]="The connection attempt failed because the destination host didn't answer after the 15 seconds period";

if(empty($argumentsF) || $argumentsF == "help"){
echo "<b>Host availability checker</b><br />".$triggerchar."check [host] [port]<br /><br /><b>Example of usage:</b><br /><u>".$triggerchar."check www.google.com 80</u><br />This will check <u>www.google.com</u> availability through port <u>80</u>.<br />If no port is specified, the script will connect to port 80.";
return;
}

$host = $arguments[0];
$port = $arguments[1];

if(empty($port) || !is_numeric($port) || $port>65535 || $port<=0) $port = 80;

echo "Connecting to <b>".$host."</b> port <b>".$port."</b> protocol...";
$conn=fsockopen("tcp://".$host, $port, $errno, $error, 15);

if(!$conn){
if(!empty($error[$errno])) $error=$error[$errno];
echo "<b>$host</b> isn't reachable through port <b>$port</b>.<br />Details:<br /><i>Error number $errno</i> - <u>".$error."</u>";
return;
}else{
echo "<b>$host</b> is reachable through port <b>$port</b>.";
}

EDIT: Parece que as minhas adaptações às tantas da manhã deram m*rda :) Aqui vai um novo código decente e que funciona:

<?php
$sair = false;

if(empty($_GET['host'])){
$sair = true;
$host = 'www.portugal-a-programar.org';
}else $host = $_GET['host'];

if(empty($_GET['port']) || !is_numeric($_GET['port']) || $_GET['port'] > 65535 || $_GET['port'] <= 0){
$sair = true;
$port = 80;
}else $port = $_GET['port'];

?><b>Host availability checker</b><br />
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
Host: <input type="text" name="host" value="<?php echo $host; ?>" /> (Hostname or IP address)<br />
Port: <input type="text" name="port" value="<?php echo $port; ?>" /> (Port number between 1 and 65535)<br />
<input type="submit" value="Check it!" />
</form><?php
if($sair === true) exit;
?><br /><fieldset>
<legend>Results</legend>
<?php
$conn = @fsockopen($host, $port, $errno, $errr, 15);
if(!$conn){
echo "<b>$host</b> isn't reachable through port <b>$port</b>.<br />Details:<br /><i>Error number $errno</i> - <u>$error</u>";
}else{
echo "<b>$host</b> is reachable through port <b>$port</b>.";
} ?>
</fieldset>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código não funciona.. era melhor postar o código a funcionar para facilitar as pessoas que percebem menos de PHP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código não funciona.. era melhor postar o código a funcionar para facilitar as pessoas que percebem menos de PHP.

Did it boss http://noobs.dreamhosters.com/scripts/checker.php:

<?php
$sair = false;

if(empty($_GET['host'])){
$sair = true;
$host = 'www.portugal-a-programar.org';
}else $host = $_GET['host'];

if(empty($_GET['port']) || !is_numeric($_GET['port']) || $_GET['port'] > 65535 || $_GET['port'] <= 0){
$sair = true;
$port = 80;
}else $port = $_GET['port'];

?><b>Host availability checker</b><br />
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
Host: <input type="text" name="host" value="<?php echo $host; ?>" /> (Hostname or IP address)<br />
Port: <input type="text" name="port" value="<?php echo $port; ?>" /> (Port number between 1 and 65535)<br />
<input type="submit" value="Check it!" />
</form><?php
if($sair === true) exit;
?><br /><fieldset>
<legend>Results</legend>
<?php
$conn = @fsockopen($host, $port, $errno, $errr, 15);
if(!$conn){
echo "<b>$host</b> isn't reachable through port <b>$port</b>.<br />Details:<br /><i>Error number $errno</i> - <u>$error</u>";
}else{
echo "<b>$host</b> is reachable through port <b>$port</b>.";
} ?>
</fieldset>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora fica aqui este código que criei para ser usado na linha de comandos

Para usar este código na linha de comandos do linux é só fazer o seguinte:

mv [ficheiro.php] [ficheiro]
chmod u+x [ficheiro]
./[ficheiro] www.google.com 80

[ficheiro.php] = O nome do ficheiro com a extensão .php

[ficheiro] = O nome do ficheiro sem a extensão php

No windows

Matem-se xD

#!/usr/bin/php
<?php

if($argc < 2 || in_array( $argv[1], array('--help', '-h' ))) {
        $help[] = 'Usage: '. $argv[0] .' <hostname> <[port>]';
        $help[] = 'Example:';
        $help[] = $argv[0] ." www.google.com 80\r\n";
        die( implode( "\r\n", $help ) );
}

$error[0] = "Invalid host";
$error[10060] = "The connection attempt failed because the destination host didn't answer after the 15 seconds period";

$host = $argv[1];
$port = empty( $argv[2] ) || !is_numeric( $argv[2] ) || $argv[2] > 65535 ? '80' : $argv[2];

echo "Connecting to ".$host." port ".$port." protocol...";

$fp = fsockopen("tcp://".$host, $port, $errno, $error, 15);

if(!$fp){
        if(!empty($error[$errno])) {
                $error = $error[$errno];

                die( "$host isn't reachable through port $port.\r\nDetails:\r\nError number $errno - $error.\r\n" );
        }
} else {
        echo "<b>$host</b> is reachable through port <b>$port</b>.\r\n";
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma mensagem de erro ou qualquer coisa mais amigável dava jeito no caso de se colocar um port inválido (menor que 1 ou maior que 65535), mas de resto parece funcionar bem, e rápido (tou-me a referir ao código do djthyrax).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No windows

Matem-se xD

Já que és tão espertinho, aqui fica para Windows o teu código com umas (quantas) correcções:

<?php
if($argc < 2 || in_array( $argv[1], array('--help', '-h', '/?'))) {
        $help = array('Usage: '. $argv[0] .' <hostname> <[port>]');
        $help[] = 'Example:';
        $help[] = $argv[0] ." www.google.com 80\r\n";
        echo implode( "\r\n", $help );
        exit;
}

$host = $argv[1];
$port = (empty( $argv[2] ) || !is_numeric( $argv[2] ) || $argv[2] > 65535) ? '80' : $argv[2];

echo "Connecting to ".$host." ".$port." port using TCP protocol...\r\n";

$handle = fsockopen("tcp://".$host, $port, $errno, $error, 15);

if(!$handle) echo "$host isn't reachable through port $port.\r\nDetails:\r\nError number $errno - $error.";
else echo "$host is reachable through port $port</b>";

echo "\r\n";
?>

Para usar este código no Windows, basta fazer cd "Directoria do ficheiro", seguido de php nomedesteficheiro.php. Não esquecer que é necessário o PHP devidamente configurado.

Btw kingless, podias ter ripado o meu código melhor. *desiludido* :P

Uma mensagem de erro ou qualquer coisa mais amigável dava jeito no caso de se colocar um port inválido (menor que 1 ou maior que 65535), mas de resto parece funcionar bem, e rápido (tou-me a referir ao código do djthyrax).

Eu quando vi que esta noite tinha feito m*rda, fiz este a correr. Mas ficam aqui as bases, agora quem quiser que desenvolva mais e que mostre o resultado :)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já que és tão espertinho, aqui fica para Windows o teu código com umas (quantas) correcções:

Estasa chamar-me de espertinho porquê ? ficaste xateado por eu ter postado um código para ser usado na linha de comandos ? se esse é o caso posso tirar o codigo... postei para mostrar aos utilizadores do p@p outra maneira de se fazer isso.  :P

Btw kingless, podias ter ripado o meu código melhor. *desiludido*

LOL ? Para fazer o meu código só modifiquei o teu código para não ter que fazer tudo outra vez... mas se quisesse fazia outro código a brincar.  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

kingless, estava a brincar contigo :D

Já que és tão espertinho, aqui fica para Windows o teu código com umas (quantas) correcções:

Estasa chamar-me de espertinho porquê ? ficaste xateado por eu ter postado um código para ser usado na linha de comandos ? se esse é o caso posso tirar o codigo... postei para mostrar aos utilizadores do p@p outra maneira de se fazer isso.  :P

Não, foi como resposta ao
No windows

Matem-se xD

:)

Btw kingless, podias ter ripado o meu código melhor. *desiludido*

LOL ? Para fazer o meu código só modifiquei o teu código para não ter que fazer tudo outra vez... mas se quisesse fazia outro código a brincar.  ;)

Estava a ser irónico :D Simplesmente porque em alguns echo's tiraste as tags html e noutros não :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

kingless, estava a brincar contigo :)

Da próxima vez que estiveres a brincar não te esqueças de colocar smiles :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

kingless, estava a brincar contigo :)

Da próxima vez que estiveres a brincar não te esqueças de colocar smiles :P

Tens razão, falhei nisso, mas não vale a pena stressar mais pah ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora