Jump to content

[PHP] Disponibilidade de um host


djthyrax
 Share

Recommended Posts

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. 😛

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>

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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>

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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";
}
?>
Link to comment
Share on other 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).

"Pensa positivo: tudo pode piorar"

Link to comment
Share on other 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* 😛

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 🙂

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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.  😛

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.  🙂

Link to comment
Share on other sites

kingless, estava a brincar contigo 😄

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.  😛

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 😄 Simplesmente porque em alguns echo's tiraste as tags html e noutros não 😛

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

kingless, estava a brincar contigo 🙂

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

Tens razão, falhei nisso, mas não vale a pena stressar mais pah 😉

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.