shell_exec无法使用nmap命令

时间:2012-02-28 13:57:34

标签: php shell-exec

我遇到了shell_exec php函数的问题,这是一个示例代码:

$output = shell_exec('nmap -PS80 -n -oG - --send-ip 11.11.11.11');

if ( $output )
{
     echo "Output found...";
}
else
{
     var_dump( $output );
}

确实返回: NULL ,但是当我将shell_exec命令更改为以下内容时:

$output = shell_exec('echo 1');

然后输出为:Output found...因此它正常工作,并且权限或安全模式没有问题(顺便说一下,这是关闭的)。

执行nmap命令时遇到问题。我在putty的shell命令行中检查了该命令,并且它正常工作:

# nmap -PS80 -n -oG - --send-ip 11.11.11.11
# Nmap 5.61TEST2 scan initiated Tue Feb 28 13:55:41 2012 as: nmap -PS80 -n -oG - --send-ip 11.11.11.11
# Nmap done at Tue Feb 28 13:55:43 2012 -- 1 IP address (0 hosts up) scanned in 0.04 seconds

问题出在哪里?

2 个答案:

答案 0 :(得分:4)

尝试指定nmap的完整路径,例如/usr/local/bin/nmap。 PHP可能不知道nmap位置。享受!

答案 1 :(得分:2)

您可能希望使用exec(),这样可以提供更好的错误诊断功能:

// Capture outout from STDERR as well
$command = "nmap ... 2>&1";

exec($command, $output, $return_var);

// If return code is not zero, the command failed
if ($return_var != 0) 
{
    // dump all output, including error messages
    var_dump($output);
}