如何从 python 调用 nikto 并将输出作为字符串返回

Posted

技术标签:

【中文标题】如何从 python 调用 nikto 并将输出作为字符串返回【英文标题】:How to call nikto from python and return output as a string 【发布时间】:2016-02-28 13:33:29 【问题描述】:

这个函数应该调用 nikto 并返回它作为字符串输出,但它只是永远挂起。我很想弄清楚为什么这不起作用,我已经尝试了我能想到的一切。

def nikto(host, *args):
    arguments = ' '.join(args)
    command = 'nikto -host  '.format(host, arguments)
    return commands.getoutput(command)

什么是 nikto?

Nikto 是一款开源 (GPL) 网络服务器扫描程序,它针对网络服务器执行多项综合测试,包括 6400 多个潜在危险文件/CGI、检查 1200 多个服务器的过时版本以及 270 多个版本的特定问题服务器。

Nikto 是用什么语言编写的?

Perl

注意:

我也试过os.popen('nikto').read()

我的系统

Linux rwilson-Aspire-E5-521 3.16.0-55-generic #74~14.04.1-Ubuntu SMP Tue Nov 17 10:15:59 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

【问题讨论】:

os.popen() 是要走的路。使用 'stdout=PIPE' 或使用 communicate() 来取回您的数据... 我会试一试的。 【参考方案1】:

如果您想调用命令并简单地获取其输出,请使用subprocess.check_output

def nikto(host, *args):
    return subprocess.check_output(['nikto', '-host', host] + args)

但是请注意,如果您的命令的返回码不为零,此方法将引发异常,但该异常将在其output 属性中包含输出。

如果您想同时捕获命令的标准错误和标准输出,请添加参数stderr=subprocess.STDOUT

【讨论】:

以上是关于如何从 python 调用 nikto 并将输出作为字符串返回的主要内容,如果未能解决你的问题,请参考以下文章

如何在python脚本中获取exe的输出?

Nikto介绍及使用方法

Nikto 帮助信息

如何从 Python 日志记录模块获得非阻塞/实时行为? (输出到 PyQt QTextBrowser)

如何在python中执行mysql查询并将输出作为数据框[重复]

如何重定向 python 解释器输出并将其捕获到 C++ 程序中的字符串中?