Sie können Sudo nicht von PHP aus ausführen, da Apache Sie dies aus Sicherheitsgründen nicht zulässt. Sie müssen Traceroute in PHP in Ihrem Code implementieren.
Es gibt mehrere solcher Implementierungen, die im öffentlichen Bereich zu finden sind.
Siehe zum Beispiel:
Wenn Sie ein Traceroute-Programm in PHP erstellen, ist der Code auf github verfügbar .
Ein weiterer Ansatz zur Vermeidung von Sudo für Traceroute basiert auf der Tatsache, dass Traceroute nicht als Root ausgeführt werden muss. es braucht nur die Fähigkeit CAP_NET_ADMIN
. Um dies als Dateifunktion für alle Benutzer festzulegen, wenn Ihr Kernel Dateifunktionen unterstützt und kein Linux-Sicherheitsmodul (SELinux, AppArmor) es blockiert:
setcap CAP_NET_ADMIN+ep /usr/sbin/traceroute
Der PHP-Code kann dann sehr einfach sein popen()
:
$handle = popen("traceroute www.xxx.com 2>&1", "r"); while(!feof($handle)) { $buffer = fgets($handle); $buffer = "<p>".$buffer."</p>\n"; echo $buffer; } pclose($handle);