[PHP] shell_exec vraagje/probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
In een test omgeving gebruik ik het shell_exec commando voor een traceroute uit te voeren met het volgende simpele commando:
PHP:
1
2
3
4
<?
$output = shell_exec("traceroute www.google.com");
print $output;
?>


Dit werkt prima maar ik wild (om speciale redenen) de -I optie gebruiken, (tracen via icmp) namelijk dit:
PHP:
1
2
3
4
5
6
<?
$output = shell_exec("traceroute -I www.google.com");
// of te wel :
// $output = shell_exec("tracert www.google.com");
print $output;
?>


Het vreemde is dat de -I of tracert optie niet werkt, er komt geen output retour, ook geen error.
Geef ik op de commandline traceroute -I www.google.com of tracert www.google.com in wordt er wel getraced, als ik het system commando gebruik ipv shell_exec is er geen verschil in de output, ook system werkt niet.

Eerlijk gezegd heb ik geen idee waarop -I of tracert via PHP niet werkt.

Heeft iemand een tip of idee waar dit aan zou kunnen liggen?
(script draait php5.2.5 op centos5.1)

Acties:
  • 0 Henk 'm!

Verwijderd

Zie http://www.php.net/shell_exec voor gebruik van deze functie.

Tevens is traceroute géén geldig batchbestand via CMD. Tracert is dit wel, de switch "-I" is ook niet te gebruiken bij tracert.
Ik zie dat je print output; doet, verander dit eens in:
PHP:
1
print $output;

Acties:
  • 0 Henk 'm!

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
Verwijderd schreef op zaterdag 18 juli 2009 @ 20:18:
Zie http://www.php.net/shell_exec voor gebruik van deze functie.

Tevens is traceroute géén geldig batchbestand via CMD. Tracert is dit wel
Onder linux wel. ;)

Acties:
  • 0 Henk 'm!

  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
Zoals ik al vermelde draait dit op centos 5, linux dus.
Linux kent wel traceroute -I (== tracert)

Op de command shell werkt het wel, alleen via php niet, de normale traceroute (zonder -I) wel.

@BartDongelmans
ik was de $ simpelweg vergeten in dit bericht, dat staat er natuurlijk wel in het script, het het nu ook in het bericht aangepast.

Maar nu nog de oplossing of oorzaak van het probleem, iemand?

[ Voor 8% gewijzigd door rob3rt op 18-07-2009 20:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Probeer eens het volgende:
PHP:
1
2
3
4
5
<?php
$shellCommand = system("traceroute -I www.google.com", $commandOutput);
echo $commandOutput; // geeft gehele output
echo $shellCommand; // geeft laatste regel van de output
?>

Acties:
  • 0 Henk 'm!

  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
er komt niet veel retour,
$commandOutput geeft als output: 2 (geen idee wat dat inhoud)
$shellCommand is geheel leeg
Maak ik er $shellCommand = system("traceroute www.google.com", $commandOutput); van dan werkt het.

Maar goed, ik moet de -I optie hebben voor mijn script, dus hier heb ik niets aan...

[ Voor 31% gewijzigd door rob3rt op 19-07-2009 18:07 ]


Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

Ik vermoed dat de user (apache?) niet de benodigde rechten heeft om 'traceroute -I' uit te voeren. Onder CentOS 5.x heb je daar superuser rechten voor nodig.

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
Het domein staat in suphp en is jailed, deze draait geheel op de eigen user, de benodigde binaries zijn toegevoegd aan suphp container en toegankelijk voor deze gebruiker.
Als ik het script als "root" draai op dezelfde server komt er ook geen result retour.

Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

rob3rt schreef op zaterdag 18 juli 2009 @ 19:54:
Heeft iemand een tip of idee waar dit aan zou kunnen liggen?
(script draait php5.2.5 op centos5.1)
Omdat -I superuser rechten nodig heeft, die heb je niet, en traceroute de error naar stderr stuurt, en die vang je niet af.

Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 17-09 19:30
su www-data
traceroute www.google.com

vervang www-data door de naam waar je apache user in zit (of PHP user). Vervolgens kijken of het hier wel werkt.

Als dat niet werkt (dat denk ik) dan even sudo installeren / configureren (als dat bij Cent-OS ook zo is)

en dan zoiets: (neem bovenstaand voorbeeld om de goede output te krijgen)
PHP:
1
2
3
4
function sysrun($run)
{
    system("sudo ".$run);
}

[ Voor 10% gewijzigd door XiniX88 op 20-07-2009 15:07 ]


Acties:
  • 0 Henk 'm!

  • rhodium
  • Registratie: Augustus 2003
  • Laatst online: 19-09 15:24
Ik gebruik altijd het volgende:

PHP:
1
2
$cmd = 'ls -lah';
$str=shell_exec($cmd.' 2>&1');


Ik heb gemerkt dat $str soms leeg blijft en de output op scherm getoont wordt. Afhankelijk welke cmd je uitvoerd. Met 2>&1 plaats die altijd de uitkomst in $str. Tenzij je geen rechten hebt, maar volgens mij krijg je dan een error in $str.

Acties:
  • 0 Henk 'm!

  • rob3rt
  • Registratie: Maart 2009
  • Laatst online: 16-09 22:26
Probleem is opgelost, heb een chmod u+s uitgevoerd op de traceroute binary, nu werkt het.

thx voor de tips.
Pagina: 1