gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:25 27 4
gpt4 key购买 nike

我有这个小脚本可以让您的无线设备进入监控模式。它执行 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 args。什么是 PIPE

一旦我更好地掌握,我可能会解决的另一件事是:

运行 subprocess.Popen() 并运行 airodump 时,会弹出控制台窗口显示扫描结果。有没有办法向用户隐藏此信息以进行清理?

最佳答案

如果您不想,则不必使用 Popen()。模块中的其他函数,例如 .call() 使用 Popen(),为您提供更简单的 API 来执行您想要的操作。

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

如果你想捕获airodump-ng wlan0命令的输出,最简单的方法是使用subprocess.check_output()功能;它会为您处理 PIPE 参数:

scanned_networks = subprocess.check_output(["airodump-ng", "wlan0"])

现在 output 包含写入其 stdout 流的任何 airodump-ng

如果你需要对进程有更多的控制,那么你确实需要使用Popen()类:

proc = subprocess.Popen(["airodump-ng", "wlan0"], stdout=subprocess.PIPE)
for line in proc.stdout:
# do something with line
proc.terminate()

关于python - 何时使用 subprocess.call() 或 subprocess.Popen(),运行 airodump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16882112/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com