Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa a todos!
Estou tentando fazer um codigo para fazer um traceroute web.
Bem, quando o servidor é windows o tracert funciona perfeitamente (normal demorar um pouco mas mostra os resultados certos). O problema é quando o servidor é linux, o traceroute só mostra a primeira linha, nao mostra a rota completa.
<?php
$destino = $_POST['destino'];
if (strpos(($_SERVER["SERVER_SOFTWARE"]), "Win") === false){
$output = shell_exec("traceroute -d $destino");
}
else {
$output = shell_exec("tracert -d $destino");
}
echo"<pre>$output</pre>";
?>
Exemplo de resultado com servidor windows:
>
Rastreando a rota para www.danielbohry.com [189.38.80.129]
com no m ximo 30 saltos:
1 2 ms 2 ms <1 ms 192.168.0.1
2 2 ms 1 ms 2 ms 10.1.1.1
3 * Esgotado o tempo limite do pedido.
4 10 ms 12 ms 8 ms 200.175.89.130
5 9 ms 8 ms 9 ms 189.59.252.177
6 11 ms 11 ms 11 ms 200.219.143.19
7 8 ms 8 ms 8 ms 187.1.128.6
8 9 ms 8 ms 8 ms 189.38.80.129
Rastreamento conclu¡do.
Exemplo de resultado com servidor linux:
>
traceroute to www.danielbohry.com (189.38.80.129), 30 hops max, 40 byte packets
Alguém tem alguma ideia de como fazer para mostrar as informações completas?
>
Esse link mostra todas as opções do traceroute.
O problema não é o comando em si, pois diretamente no servidor com esse comando (traceroute -d $destino) funciona, e sim a forma que o php está exibindo o resultado
Fiz um teste em um servidor meu com Linux Red Hat e funcionou perfeitamente.
Código que testei:
<?php
$output = shell_exec('tracert www.danielbohry.com');
echo '<pre>', $optput, '</pre>', PHP_EOL;
Saída:
>
tracert www.danielbohry.com
traceroute to www.danielbohry.com (189.38.80.129), 30 hops max, 40 byte packets
1 208.43.61.41-static.reverse.softlayer.com (208.43.61.41) 0.498 ms
2 po104.dar02.sr01.dal01.networklayer.com (66.228.118.217) 0.664 ms 0.891 ms 0.886 ms
3 ae6.bbr02.eq01.dal03.networklayer.com (173.192.18.212) 0.376 ms 0.391 ms 0.391 ms
4 TenGigabitEthernet1-3.ar3.DAL2.gblx.net (64.215.81.1) 0.397 ms
5 lesbos.kinghost.net (189.38.80.129) 171.367 ms 170.940 ms 170.931 ms
Meu servidor é um CentOS, ainda não consegui fazer funcionar nele =/
Podes me dizer o que seria o "PHP_EOL"?
CentOS é uma distribuição baseada no RedHat, portanto não era pra ter diferença. Você chegou a testar com o código que eu usei?
PHP_EOL é uma constante do PHP para quebrar linha no código-fonte independente do sistema operacional, usei só por costume mesmo.
Esse link mostra todas as opções do traceroute.