所以我在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'。I want to know
- 如果我对问题的诊断是正确的,
- 如何修复?
-
您确定日志文件已经创建了吗?我不知道在哪里提到了这个名字,但可能是默认创建的。
-
sudo
是否要求您输入密码? -
os.system
是不赞成的,或者至少是不赞成的;最好使用subprocess.call()
,subprocess.check_call()
或subprocess.Popen()
(给你一个对象,你可以用它来进一步控制过程)。
编辑:刚刚测试。这里运行扫描,但是显示输出而不是写入文件。可能您在os.system()
调用中缺少> nmapscan1.log
部分。
使用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()
- 你可以在python中使用
- 您可以使用
subprocess
模块
commands
模块。主要问题是当使用sudo
命令在python
程序不要求密码,所以最好运行sudo python filename.py