我有一个小脚本,可以让你的无线设备进入监控模式。它执行一次airodump扫描,然后在结束扫描后将输出转储到file.txt或一个变量,这样我就可以抓取BSSID和我可能需要的任何其他信息。
我觉得我还没有掌握subprocess.call()和subprocess.Popen()之间的概念和区别。
这是我目前所拥有的:
def setup_device():
try:
output = open("file.txt", "w")
put_device_down = subprocess.call(["ifconfig", "wlan0", "down"])
put_device_mon = subprocess.call(["iwconfig", "wlan0", "mode", "monitor"])
put_device_up = subprocess.call(["iwconfig", "wlano", "up"])
start_device = subprocess.call(["airmon-ng", "start", "wlan0"])
scanned_networks = subprocess.Popen(["airodump-ng", "wlan0"], stdout = output)
time.sleep(10)
scanned_networks.terminate()
except Exception, e:
print "Error:", e我仍然不知道何时何地以何种方式使用subprocess.call()和subprocess.Popen()
我认为最让我困惑的是stdout和stderr参数。什么是PIPE
一旦我掌握得更好,我可能会解决的另一件事是:
当运行running subprocess.Popen()并运行airodump时,将弹出显示扫描的控制台窗口。有没有办法对用户隐藏这一点,以清理一些东西?
发布于 2013-06-02 19:10:47
如果您不想使用Popen(),则不必使用它。模块中的其他函数,如使用Popen()的.call(),为您提供了一个更简单的应用程序接口来执行您想要的操作。
所有控制台应用程序都有3个“文件”流:stdin用于输入,stdout和stderr用于输出。应用程序决定将什么写入到何处;通常是将错误和诊断信息写入stderr,其余的写入stdout。如果您希望在Python程序中捕获这些输出中的任何一个的输出,则需要指定subprocess.PIPE参数,以便将“流”重定向到您的程序中。因此得名。
如果想要捕获airodump-ng wlan0命令的输出,最简单的方法是使用subprocess.check_output()函数;它会为您处理PIPE参数:
scanned_networks = subprocess.check_output(["airodump-ng", "wlan0"])现在,output包含了airodump-ng写入其stdout流的所有内容。
如果您需要对流程进行更多的控制,则确实需要使用Popen()类:
proc = subprocess.Popen(["airodump-ng", "wlan0"], stdout=subprocess.PIPE)
for line in proc.stdout:
# do something with line
proc.terminate()https://stackoverflow.com/questions/16882112
复制相似问题