我正在尝试创建一个python程序,可以定期轮询来自airodump-ng的输出,这是一个wifi嗅探工具。我在运行Raspbian和Python 3.4的RPI上执行此操作 我已经在几个网站上查询了如何做到这一点,但每当我尝试这个时,我就会遇到一种僵局,程序会停滞不前。
我正在使用此代码:
import subprocess
airodump = subprocess.Popen(['sudo','airodump-ng','mon0'])
out,err = airodump.communicate(timeout=10)
所以奇怪的是,当我逐一将这些命令输入到在RPI上运行的IDLE时,一切正常,但是10秒后我收到超时错误。当不使用超时参数时,程序就会停止。使用额外的参数' stdout = subprocess.PIPE'也没有用。 但是当我去终端并使用命令' python3'启动python时然后输入第一行和第二行,然后整个屏幕填充airodump-ng的输出,我不能再输入任何内容了!
那我怎么解决这个问题呢?我只是想从airodump-ng获得最新的输出,airodum-ng的输出可以在后台更新,在另一个线程中。我只想要最新的输出。
答案 0 :(得分:1)
请参阅doc,按预期工作,尤其是Note
如果进程在超时秒后没有终止,则会引发TimeoutExpired异常。捕获此异常并重试通信不会丢失任何输出。
请注意
读取的数据缓冲在内存中,因此如果使用此方法,请不要使用此方法 数据大小很大或无限制。
我会查看大量使用airodump的wifite代码!
答案 1 :(得分:0)
您可以使用pyrcrack,这是python aircrack-ng绑定。
PyrCrack是一个Python API,公开了一个常见的aircrack-ng API。由于AircrackNg将在后台进程中运行,并在文件和stdout中生成可解析的输出,因此,最Python化的方法是上下文管理器,之后进行清理。
安装:
该库在Pypi上可用,您可以直接通过pip安装它:
pip install pyrcrack
用法:
该库导出了一个基本的aircrack-ng API,旨在始终保持较小的可读代码库。
这导致了一个简单的库,该库可以执行aircrack-ng的每个套件命令并自动检测其使用说明。在此基础上,它会动态创建类,以docstring的形式继承该用法,并构建一个接受关键字参数和参数的run()方法,并在尝试运行它们之前对其进行检查。
随着airodump-ng的返回与关联客户端的访问点,某些类将自身公开为异步迭代器。
您可以查看examples /文件夹中的一些用法示例,例如基本的“扫描目标”,它将列出可用的接口,让您选择一个接口,将其置于监视模式,然后扫描目标更新每2秒显示一次结果。
import asyncio
import pyrcrack
from rich.console import Console
from rich.prompt import Prompt
async def scan_for_targets():
"""Scan for targets, return json."""
console = Console()
console.clear()
console.show_cursor(False)
airmon = pyrcrack.AirmonNg()
interface = Prompt.ask(
'Select an interface',
choices=[a['interface'] for a in await airmon.interfaces])
async with airmon(interface) as mon:
async with pyrcrack.AirodumpNg() as pdump:
async for result in pdump(mon.monitor_interface):
console.clear()
console.print(result.table)
await asyncio.sleep(2)
asyncio.run(scan_for_targets())