我正在为我的公司制作扫描服务器,它将用于从nessus,nmap,nikto等工具启动扫描。我用PHP编写了这些页面,但我需要控制随后的由于我需要在扫描完成后执行各种操作(例如通过电子邮件发送,从nessus服务器上下载报告等),因此我需要执行各种操作(使用nohup生成并使用&)。
我被建议在这里创建一个PHP页面与之通信的python守护进程。我已经无休止地搜索了,但是我从初学者的角度找不到任何能够解释通信背后逻辑的东西(编写一个守护进程将是我最先进的项目)。我知道IPC和unix域套接字,但我不知道如何在我的情况下使用它们。因此,我正在听取一些建议或指示我应该做什么。
我在想我可以创建一个带有while循环的python脚本,该循环不断检查进程是否已终止,何时终止,执行适当的进程后终止操作。该脚本将被守护,因此它在后台运行,我将从PHP页面调用它,并将PID作为参数,例如我可以使用argparse模块访问它。
我是否在逻辑上处于正确的位置 - 或者是否有更好的解决方案?
任何帮助,或只是谷歌的东西,非常感谢!感谢
答案 0 :(得分:5)
我认为像gearman这样的东西肯定会让它更容易实现。
Gearman是一个作业服务器,它允许您启动作业,查询作业是否仍在运行并获取作业的输出(作为文本)。
它支持PHP和Python(以及其他)。
(这个答案让我觉得自己像个推销员。)
答案 1 :(得分:1)
所以你的计划是:PHP产生nmap&看门狗。 Watchdog保持轮询nmap完成运行,然后在完成后进行一些后期处理。
稍微清洁一点就是: PHP产生一个'进程管理器'(你也写)。这个进程管理器基本上是一个在子进程中执行nmap的程序,等待这个子进程完成(使用'wait'系统调用,例如在C中看起来像:http://linux.die.net/man/2/wait),然后发布帖子处理
它也会更有效率,因为'等待'可能比反复检查PID是否已经终止更便宜。
如果你喜欢python而不是C,python也有子进程管理: http://docs.python.org/library/subprocess.html