在Python

时间:2015-11-25 16:08:42

标签: python raspberry-pi subprocess raspbian

我正在尝试创建一个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的输出可以在后台更新,在另一个线程中。我只想要最新的输出。

2 个答案:

答案 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())