Nmap的python子进程问题



我试图通过使用subprocess将linux二进制文件的标准输出发送到变量。但只要继续得到回溯。

>>> import subprocess
>>>nmap -sn -Pn todd.ns.cloudflare.com --script dns-check-zone --script-args='dns-check-zone.domain=www.macmonster.com

任何想法(哦,我使用Python2.7)。

理想情况下,我希望避免使用Shell=true,以避免任何安全问题。

谢谢,

shlex来救援!

shlex模块将接受一个包含整个shell命令的字符串,并按照Popen和check_output所期望的方式将其拆分。这样的:

import shlex, subprocess
cmd = "/usr/bin/nmap -sn -Pn todd.ns.cloudflare.com --script dns-check-zone --script-args='dns-check-zone.domain=www.macmonster.com'"
args = shlex.split(cmd)
output = subprocess.check_output(args)

当你查看参数的内容时,你会看到:

>>> print args
['/usr/bin/nmap', '-sn', '-Pn', 'todd.ns.cloudflare.com', '--script', 'dns-check-zone', '--script-args=dns-check-zone.domain=www.macmonster.com']

注意,shlex将选项"——script dns-check-zone"拆分为两个令牌。另一方面,它保留了"——script-args='dns-check-zone.domain=www.macmonster.com'",但去掉了单引号。

import subprocess
output = subprocess.check_output(["/usr/bin/nmap", "-sP", "-n", "172.16.1.0/24"])
output = subprocess.check_output(["/usr/bin/nmap", "-sP", "-n", "172.16.1.0/24"], stderr=subprocess.STDOUT)

你试过了吗:

p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
var = p.stdout.read()
print var

我本想用communicate,但它返回一个奇怪的列表类型的东西

最新更新