所以我在Ubuntu 11.4和Python 2.7上运行看起来像这样的代码:
p_scan_command = "sudo nmap -sC -sV -PN -O 192.168.0.1/24"
time.sleep(1.5)
os.system(p_scan_command)
f = open('nmapscan1.log', 'r')
print f.read()
f.close()
发生的事情是我最终没有结果,扫描没有被运行,可能是因为它正在运行'sudo'。我想知道
答案 0 :(得分:7)
您确定甚至创建了日志文件吗?我看不出这个名字的位置 - 但也许它是默认创建的。
您是否按sudo
要求输入密码?
这可以告诉你sudo是否真的运行。
os.system
有点被弃用或至少不赞成;更好地使用subprocess.call()
,subprocess.check_call()
或subprocess.Popen()
(为您提供一个可用于进一步控制流程的对象)。
编辑:刚刚测试过。此处扫描运行,但输出显示而不是写入文件。可能您错过了> nmapscan1.log
来电中的os.system()
部分。
使用subprocess
,您可以写
sp = subprocess.Popen(['sudo', 'nmap', '-sC', '-sV', '-PN', '-O', '192.168.0.1/24'],
stdout=file("nmapscan1.log", "w"))
sp.wait()
f = open('nmapscan1.log', 'r')
print f.read()
f.close()
或者如果您不需要该文件,只需
sp = subprocess.Popen(['sudo', 'nmap', '-sC', '-sV', '-PN', '-O', '192.168.0.1/24'],
stdout=subprocess.PIPE)
print sp.stdout.read()
sp.wait()
答案 1 :(得分:0)
commands
模块。subprocess
模块。主要问题是在sudo
程序中使用python
命令时没有要求输入密码,因此最好运行sudo python filename.py