编程语言
首页 > 编程语言> > 无法将远程Openfiles.exe数据拉入PHP

无法将远程Openfiles.exe数据拉入PHP

作者:互联网

我正在尝试使用openfiles.exe来获取当前在远程服务器上打开的文件的信息.我可以从网络服务器打开的命令提示符处运行命令,因此我知道它可以在网络服务器和我要定位的服务器之间工作.但是,当我尝试在PHP中调用相同的命令时,出现了Apache错误日志条目:“错误:目标系统必须运行Windows XP或更高版本.” Web服务器在Xp Pro上运行,目标服务器在Windows Server 2003上.从命令提示符处,命令可以完美运行,甚至对于网络上较旧的Windows 2000服务器,也只是从PHP运行时,它似乎具有一个问题.是否有人对为什么和/或如何解决这个问题有任何想法?

我正在使用的代码是:

$output = shell_exec("openfiles /query /s servername");
echo $output;
  $i = 0;
  $c = count($output);

  while ($i < $c) {
    $dump = $output[$i];
    echo $dump ."<br>";
    $i++;
  }

shell_exec(),system()和exec()的行为完全相同,就像从批处理文件运行命令一样.稍微有趣的一点是,如果删除“ / s服务器名”部分,它会输出以下内容:

Files Opened Remotely via local share points:
---------------------------------------------
INFO: No shared open files found.

…因此,就好像/ s标志正在抛出它.就像我说的那样,它可以在命令提示符下正常工作,因此我知道可执行文件能够从目标服务器中提取信息.我只需要找出为什么PHP似乎在执行相同操作时就有问题…

解决方法:

您的Apache服务器使用错误的帐户运行,并且没有对远程IPC $共享的权限;)

编辑-全文:

可能是权限? Apache以什么用户身份运行?当您从命令提示符处执行此操作时,大概是作为域管理员帐户或具有正确权限以连接到远程计算机上的IPC $共享(IIRC的方式)的其他帐户执行此操作).而Apache可能没有,而当实际发生的事情是它无法联系IPC $共享并假设远程计算机没有Windows XP或更高版本时,这可能只是一个误导性的错误消息…

看起来在XP版本的openfiles中,有/ u和/ p选项可以传递用户名和密码.将域管理员凭据粘贴到那里进行测试,看看是否可行.如果是这样,请创建一个没有文件存储权限的受限AD帐户并使用这些凭据或其他凭据,以确保没有人可以窃取您的主域管理员帐户.

标签:shell-exec,apache,windows,php
来源: https://codeday.me/bug/20191127/2075511.html