如何查看通过pywinauto控制Putty执行msfconsole命令的结果?
如何获取Pywinauto控制Putty执行msfconsole后的输出结果?
用pywinauto直接抓取Putty终端的输出确实有点小挑战,不过有几个实用的办法可以搞定,我给你梳理下:
方法1:定位Putty终端控件直接读取文本
Putty的终端界面在pywinauto里是一个可识别的控件,你可以先找到它的标识,再提取文本:
- 先运行这段代码查看窗口下的所有控件,找到终端对应的控件信息:
app_Putty.top_window().print_control_identifiers()
- 根据输出找到终端控件(通常类名是
PuTTY),然后提取文本:
# 定位到终端控件 terminal = app_Putty.top_window().child_window(class_name="PuTTY") # 获取终端的全部文本内容 msf_output = terminal.texts()[0] print(msf_output)
这个方法能实时获取终端内容,不过要注意控件定位的准确性,不同Putty版本可能略有差异。
方法2:让Putty把输出写入日志文件
启动Putty时加上日志参数,所有终端输出会自动保存到指定文件,之后直接读取文件即可:
import time # 启动Putty时指定日志文件路径 app_Putty = Application().Start(cmd_line='putty -ssh user@10.10.10.10 -log putty_msf_output.log') app_Putty.top_window_().TypeKeys("password {ENTER}") time.sleep(5) command = 'msfconsole' app_Putty.top_window_().TypeKeys(command+"{ENTER}") # 给足够时间让msfconsole加载完成(根据实际情况调整sleep时长) time.sleep(15) # 读取日志文件内容 with open('putty_msf_output.log', 'r', encoding='utf-8') as f: msf_output = f.read() print(msf_output)
这个方法最稳定,不用担心控件定位的问题,还能永久保存输出记录。
方法3:模拟复制粘贴获取内容
利用Putty的快捷键复制终端内容到剪贴板,再读取剪贴板:
import time import pyperclip # 执行完命令后等待加载 time.sleep(10) # Putty中Ctrl+Shift+A是全选(如果你的Putty快捷键不一样,自己调整) app_Putty.top_window().TypeKeys("^+A") # 复制到剪贴板(Putty默认用Ctrl+Insert复制) app_Putty.top_window().TypeKeys("^INSERT") # 读取剪贴板内容 msf_output = pyperclip.paste() print(msf_output)
这个方法操作简单,但依赖Putty的快捷键设置,如果你的Putty改了快捷键,需要对应调整。
内容的提问来源于stack exchange,提问作者fsnewsagency fsnewsagency




