Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tiagocaus

com comando de PING

Recommended Posts

Olá Pessoal,

Estou fazendo um trabalho para uma empresa que possui uma rede, mas estou com algumas dificuldades técnicas.

Fiz esse cod que dispara ping para um determinado site ou IP, só que parece que as estatística de tempo não estão batendo com o ping que é dado no CMD do Pront. O tempo do meu cod esta muito baixo, para resolver esse problema, gostaria que todos os PINGs partissem desse de um determinado IP "000.00.000.000", fazendo isso terei como calcular melhor, pois não sei a partir de onde estão sendo disparado os ping.

Se alguém poder me ajudar ficarei muito grato.

 

Demo do Cod: http://www.hostingcia.info/Ping/

 

 

COD:

<?php
function chkuri($link, $option)
{
 if(substr($link,0,4)!="http"){ 
  $link = "http://".$link;
 }

 $timestart = microtime();

 $churl = @fopen($link,'r');

 $timeend = microtime();
 $diff = number_format(((substr($timeend,0,9)) + (substr($timeend,-10)) - (substr($timestart,0,9)) - (substr($timestart,-10))),4);
 $diff = $diff*100;
 
 if (!$churl) {
  $message="<b><div class=offline>Offline</div></b>";
 }else{
  $message="<b><div class=online>Online</div></b> "; if($option==1){ $message = $message."[ ping: ".$diff."ms ]";}
 }
 echo $message;
}
?>
<html>
<head>
<meta http-equiv="refresh" content="5">

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">

body,td,th {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 12px;
}
a.link { color: green; 
		 font-size: 11px; 
		 text-decoration: none;}
.offline { color: red; }

.online { color: green; }
.borda {
	border: 1px solid #999;
}
td {border: 1px solid #999;}
</style></head>
<body>
<table width="500" border="0" cellpadding="0" cellspacing="0">
  <tr>
	<td width="33" align="center" bgcolor="#CCCCCC">ID</td>
	<td width="299" bgcolor="#CCCCCC"> </td>
	<td width="168" bgcolor="#CCCCCC"> </td>
  </tr>
  <tr>
	<td align="center">1</td>
	<td align="left">Yahoo.com</td>
	<td align="center"><?php echo chkuri("www.yahoo.com",1);hoo ?></td>
  </tr>
  <tr>
	<td align="center">2</td>
	<td align="left">201.59.143.254</td>
	<td align="center"><?php echo chkuri("201.59.143.254",1);hoo ?></td>
  </tr>
  <tr>
	<td align="center">3</td>
	<td align="left">10.175.0.177</td>
	<td align="center"><?php echo chkuri("10.175.0.177",1);hoo ?></td>
  </tr>
  <tr>
	<td align="center">4</td>
	<td align="left"> </td>
	<td align="center"> </td>
  </tr>
  <tr>
	<td align="center">5</td>
	<td align="left"> </td>
	<td align="center"> </td>
  </tr>
</table>


</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como se da esse comando?

Esse eu não conheço...rsrs :)

 

 

Porque você simplesmente não da um shell_exec(ping claro) e vê as respostas que esse te retornam?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
//$link = getenv('REMOTE_ADDR');
$a = shell_exec('ping '.$link);
preg_match_all('/tempo\<[0-9][a-z]+/i', $a, $tempo);
if($tempo[0][0] != null){
 //online
} else {
 //offline
}
//Tempo:
echo $tempo[0][0];
?>

Desculpa a demora!

Era isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Amigo, você consegue modificar no meu COD, é que meu servidor não aceita comandos SHELL esse meu funciona, mas o calculo do tempo esta errado, mas não sei como concertar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu servidor não aceitando é meio dificil...

O que você ta fazendo é vendo o tempo de respota do servidor http...isso não é ping.

Fopen não suporta icmp...então o que você teria que fazer era dar um socket create com um icmp e enviar pacotes de 16 ou 32 bits.

Eu teria que procurar algum exemplo na net para te mostrar direitinho...

Abraço!

 

Edit:deixemos para que os experts deem sua opinião!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei no manual a função usando sockets...eis:

 

Autor:Jean Charles MAMMANA

 

<?php

/// start ping.inc.php ///

$g_icmp_error = "No Error";

// timeout in ms
function ping($host, $timeout)
{
		$port = 0;
		$datasize = 64;
		global $g_icmp_error;
		$g_icmp_error = "No Error";
		$ident = array(ord('J'), ord('C'));
		$seq   = array(rand(0, 255), rand(0, 255));

	 $packet = '';
	 $packet .= chr(8); // type = 8 : request
	 $packet .= chr(0); // code = 0

	 $packet .= chr(0); // checksum init
	 $packet .= chr(0); // checksum init

		$packet .= chr($ident[0]); // identifier
		$packet .= chr($ident[1]); // identifier

		$packet .= chr($seq[0]); // seq
		$packet .= chr($seq[1]); // seq

		for ($i = 0; $i < $datasize; $i++)
				$packet .= chr(0);

		$chk = icmpChecksum($packet);

		$packet[2] = $chk[0]; // checksum init
		$packet[3] = $chk[1]; // checksum init

		$sock = socket_create(AF_INET, SOCK_RAW,  getprotobyname('icmp'));
		$time_start = microtime();
	socket_sendto($sock, $packet, strlen($packet), 0, $host, $port);
   

	$read   = array($sock);
		$write  = NULL;
		$except = NULL;

		$select = socket_select($read, $write, $except, 0, $timeout * 1000);
		if ($select === NULL)
		{
				$g_icmp_error = "Select Error";
				socket_close($sock);
				return -1;
		}
		elseif ($select === 0)
		{
				$g_icmp_error = "Timeout";
				socket_close($sock);
				return -1;
		}

	$recv = '';
	$time_stop = microtime();
	socket_recvfrom($sock, $recv, 65535, 0, $host, $port);
		$recv = unpack('C*', $recv);
	   
		if ($recv[10] !== 1) // ICMP proto = 1
		{
				$g_icmp_error = "Not ICMP packet";
				socket_close($sock);
				return -1;
		}

		if ($recv[21] !== 0) // ICMP response = 0
		{
				$g_icmp_error = "Not ICMP response";
				socket_close($sock);
				return -1;
		}

		if ($ident[0] !== $recv[25] || $ident[1] !== $recv[26])
		{
				$g_icmp_error = "Bad identification number";
				socket_close($sock);
				return -1;
		}
	   
		if ($seq[0] !== $recv[27] || $seq[1] !== $recv[28])
		{
				$g_icmp_error = "Bad sequence number";
				socket_close($sock);
				return -1;
		}

		$ms = ($time_stop - $time_start) * 1000;
	   
		if ($ms < 0)
		{
				$g_icmp_error = "Response too long";
				$ms = -1;
		}

		socket_close($sock);

		return $ms;
}

function icmpChecksum($data)
{
		$bit = unpack('n*', $data);
		$sum = array_sum($bit);

		if (strlen($data) % 2) {
				$temp = unpack('C*', $data[strlen($data) - 1]);
				$sum += $temp[1];
		}

		$sum = ($sum >> 16) + ($sum & 0xffff);
		$sum += ($sum >> 16);

		return pack('n*', ~$sum);
}

function getLastIcmpError()
{
		global $g_icmp_error;
		return $g_icmp_error;
}
/// end ping.inc.php ///
?>

Pelo que você me disse,talvez não adiante em nada...

Abraço!

 

Ps:dá uma lida na parte de sockets...provavelmente vai encontrar o que precisa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, esse ping não funcionou...

 

Olha só pessoal, sou muito grato a todos, mas o que preciso seria usar no meu COD mesmo; a única coisa que precisa ser feito é no calculo do tempo de Ping que esta errado. Alguem conseguiria mudar o meu COD so para ter o calculo de Ping certo?

 

Pois o que preciso é somente isso, um COD que me mostre se um determinado IP esta Pingando, caso sim, (Mostre Online e o tempo de ping resumido [ ping: 0.00ms ]), caso não (Mostre somente OffLine)

 

O meu calculo de tempo deve estar errado pois estou calculando o tempo que demora para ser carregado o IP ou algo no sentido... mas não sei se estou certo do que estou falando, sei fazer algumas coisinhas, mas não sou bom! Sei que tem pessoas que são feras nisso! Confesso que esse cod esta sendo um desafio para mim!...rsrs

 

Eu fiz meu cod daquele jeito pois eu uso uma revenda e tenho limitações ao Executar codigos.

 

Se alguem poder me ajudar ficarei muiiiito grato mesmo!

Obrigado a Todos.

 

Demo do Cod: http://www.hostingcia.info/Ping/

 

 

 

Para dar ping faça:

 

<?php
$ping = `ping 127.0.0.1 && arp -a`;
echo nl2br($ping);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

não posso dizer muita coisa sobre isso aí... não sei o qeu contém no script

 

Todo o conteúdo é o meu COD que coloquei nesse pot, ele esta logo no começo do Topico. A linha 5 é o seu cod que me mandou.

Entende? Eu te add no msn, se poder me aceitar...

T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tiago...já disse...seu script não está retornando a resposta de um ping,e sim do servidor http!

Não mudando seu código,creio ser impossivel...

Compartilhar este post


Link para o post
Compartilhar em outros sites

al´pem do mais.. de como você fez a implementação usando o passthru ?

por acaso entendeu como usar e como fucniona ?

 

saber usar o prompt do ms-dos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, bom depende como você se refere perguntando se sei usar o MS-DOS... até hoje o que precisei usar nele eu consegui fazer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pra executar o código do mesmo jeito que está ai:

 

 

 

<?php
$ping = `ping 127.0.0.1 && arp -a`;
echo nl2br($ping);
?>

não troque os acentos por aspas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que vi em: http://www.hostingcia.info/Ping/ parace que o seu sistema esta rodando direitiho este sistema seria muito util para o meu projeto, já que ele carrega muito rapido, o que eu tenho peguei demora um ano para carregar o que você fez no seu codigo fonte para ficar tão versatil?

estou começado na área e é atraves de pesquisas que estou tentando enteder como a coisa funciona.

Agradeço se poder me ajudar

abraços

que Deus vos abençoe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.