【问题标题】:shell_exec not working with nmap commandshell_exec 不能使用 nmap 命令
【发布时间】:2012-02-28 13:57:33
【问题描述】:

我遇到了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

那么问题出在哪里?

【问题讨论】:

    标签: php shell-exec


    【解决方案1】:

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

    【讨论】:

    • PHP 只是在执行shell_exec 函数,因此与nmap 位置没有任何关系,与echo 相同——我是否必须指定echo 的完整路径?我不这么认为=/
    • 因为你不明白 nmap 是如何在你的 shell 中注册的。看@stackoverflow.com/questions/9401824/…
    • Wtf,当我将 nmap [..] 替换为 /usr/local/bin/nmap(nmap 可执行文件所在的位置)时,它起作用了。谢谢!你能稍微修改一下你的答案,这样我就可以给你的答案打分,因为我已经给它打分了,现在我觉得很愚蠢 - 对不起。
    【解决方案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);
    }
    

    【讨论】:

    • 它确实返回:array(0) { } array(0) { }.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多