tiagocaus 1 Denunciar post Postado Dezembro 5, 2008 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
eibon 2 Denunciar post Postado Dezembro 5, 2008 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
tiagocaus 1 Denunciar post Postado Dezembro 5, 2008 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
eibon 2 Denunciar post Postado Dezembro 5, 2008 <?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
tiagocaus 1 Denunciar post Postado Dezembro 5, 2008 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
eibon 2 Denunciar post Postado Dezembro 5, 2008 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
Alaerte Gabriel 662 Denunciar post Postado Dezembro 6, 2008 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
eibon 2 Denunciar post Postado Dezembro 7, 2008 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
tiagocaus 1 Denunciar post Postado Dezembro 8, 2008 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
hinom 5 Denunciar post Postado Dezembro 8, 2008 se você não tiver permissão para executar as funções de execução de arquivos do sistema não poderá fazer muita coisa.. http://jp.php.net/manual/pt_BR/function.passthru.php $ip = '127.0.0.1'; $cmd = 'ping ' . $ip . ' && arp -a'; passthru ( $cmd, $rs ); print_r( $rs ); Compartilhar este post Link para o post Compartilhar em outros sites
tiagocaus 1 Denunciar post Postado Dezembro 8, 2008 Olá amigo, Hinim, De uma olhada no Numero 5, é esse mesmo o tempo? http://www.hostingcia.info/Ping/ Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Dezembro 8, 2008 não posso dizer muita coisa sobre isso aí... não sei o qeu contém no script Compartilhar este post Link para o post Compartilhar em outros sites
tiagocaus 1 Denunciar post Postado Dezembro 8, 2008 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
eibon 2 Denunciar post Postado Dezembro 8, 2008 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
hinom 5 Denunciar post Postado Dezembro 8, 2008 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
tiagocaus 1 Denunciar post Postado Dezembro 8, 2008 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
Alaerte Gabriel 662 Denunciar post Postado Dezembro 11, 2008 É 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
fenicris 0 Denunciar post Postado Janeiro 25, 2009 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