Je dois effectuer un traceroute TCP en utilisant soit le traceroute Linux, soit un autre paquet, mais j'ai du mal à trouver le moyen de faire la requête depuis PHP sans avoir besoin de privilèges sudo.
Parce que l'URL proviendra d'une requête utilisateur, je ne souhaite pas utiliser sudo.
Voici un exemple:
$url = 'ebay.com';
$exec = 'sudo traceroute -w 1 -q 1 -T ' . $url;
$escaped_command = escapeshellcmd($exec);
$result = shell_exec($escaped_command);
echo $result;
var_dump($result);
Ce code fonctionne, mais seulement avec sudo
ou sans -T
. Sans sudo
cela, il retourne une chaîne vide. Sans -T
le traceroute ne survit pas aux pare-feu.
Si cela peut aider, je suis sur un OS Centos 7.
Remarque: je ne peux pas utiliser UDP au lieu de TCP car il est souvent bloqué par le pare-feu de destination.
-T
est l'abréviation de -M tcp
et cette méthode est décrite comme utilisant des connexions semi-ouvertes par défaut et nécessite donc un accès root. Il n’est pas écrit explicitement dans la page de manuel, mais rien n’est écrit sur les autorisations nécessaires. Probablement avec l'option (explicitement non recommandée), tcpconn
il n'aura pas besoin de root car il s'agit d'une opération simple connect
.
-T