【发布时间】:2015-06-10 10:19:12
【问题描述】:
我是 Python 的新手,正在尝试学习如何编写一个 SSID 扫描器来执行以下操作:
- 询问用户扫描的时间长度
- 使用 wlan 通过 Airmon-NG 启用监控模式
- 检查 Mon0 是否已启用,然后进行下一步
- 检查 Mon0 后,使用 Mon0 启动 Airmon-NG 并扫描 5 分钟
- 让程序看到一旦达到 5 分钟标记,打印出“SSID Scan Complete”
- 关闭程序
我想最终在 5 分钟后获取扫描输出并将其转储到文本文件中以供以后查看,但我还没有到那里,所以请原谅我继续学习时对 Python 的无知。到目前为止我所拥有的只是经过研究,但我觉得卡住了,我知道的一些部分是错误的,我无法弄清楚,例如:
- 实际上在启动 airodump-NG 之前验证 Mon0 是否开启
- 在完成前等待输入的时间长度
这是我目前所拥有的:
#!/usr/bin/env python
import os
import subprocess
from datetime import datetime
#Clear the screen
subprocess.call("clear")
#Ask for the length of time in Minutes to scan for SSIDs
scan_ssid = raw_input("How many minutes would you like to scan for: ")
scan_length = scan_ssid
#Print banner
print "Scanning for SSIDs for " + scan_ssid " minutes."
#Start and verify airmon-ng in monitor mode
print "Placing wlan iface in Monitor Mode"
os.system("airmon-ng start wlan2")
monitor = mon0
if monitor == True:
print "Monitor Mode: Enabled"
#Start airodump-ng with monitor enabled
print "Starting SSID scan with Monitor Mode"
os.system("airodump-ng mon0")
#Scan for the user requested timefame
scan_length = time.time()
while True:
scan_length = 0
if scan_length == 5 or time.time() > scan_length:
break
scan_length = scan_length - 1
print "SSID Scan Complete!"
sys.exit(0)
【问题讨论】:
-
我对 python 也比较陌生,所以我可能不是最有帮助的,但这是我能提供的。如果 scan_length 还剩 5 分钟,你不是
breaking 吗?不过可以肯定的是,我建议再看一下while循环。一开始我花了一点时间来理解类似循环的细微差别。至于验证 Mon0 是否打开,我建议使用if/else交叉引用 airmon-ng 的输出。然后在特定短语上使用grep或比较前后的原始结果。好主意顺便说一句!我一直想做类似的事情。你有 GitHub 吗? -
嗯,我明白你对休息部分的意思了。我也试图掌握 while 循环。至于对airmon-ng的检查,我正在考虑一种读取输出的方法,但问题是我不确定如何解析输出并找到“mon0”,因为我认为脚本会在后台做所有事情,所以我不会真正看到任何东西。
-
我在想也许这会起作用:subprocess.check_output("mon0", shell=True),但不太确定
-
是的,我迷失了这个建议。我知道如果您在命令的原始输出中附加一个基本文本文件(绕过所有背景内容)然后使用
grep检查它的 mon0 它将起作用。然而,这种方法总是感觉有点“硬编码”,我确信有更好的方法我从来没有过多地研究过它。仍在尝试学习和练习一些简单的东西。您可以通过实践和调试来学习,所以请坚持下去。非常有兴趣了解您如何使用此脚本。