何时使用subprocess.call()或subprocess.Popen(),运行airodump

2024-04-20 05:03:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小脚本,让你的无线设备进入监控模式。它执行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()

我认为最让我困惑的是stdoutstderr参数。什么是PIPE

另一件事,我可以修复自己一旦我得到更好的把握是:

running subprocess.Popen()运行airodump时,控制台窗口弹出,显示扫描。有没有一种方法可以对用户隐藏这一点来整理东西?


Tags: txtoutputputdevicecallngstartfile
1条回答
网友
1楼 · 发布于 2024-04-20 05:03:38

如果您不想使用Popen()。模块中的其他函数,例如.call()使用Popen(),为您提供了一个简单的API来完成您想要的任务。

所有控制台应用程序都有3个“文件”流:输入为stdin,输出为stdoutstderr。应用程序决定写什么;通常错误和诊断信息写到stderr,其余的写到stdout。如果要在Python程序中捕获这些输出之一的输出,可以指定subprocess.PIPE参数,以便将“stream”重定向到程序中。因此得名。

如果要捕获airodump-ng wlan0命令的输出,那么使用^{}函数是最简单的;它为您处理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()

相关问题 更多 >