惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
B
Blog
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
爱范儿
爱范儿
博客园_首页
博客园 - 聂微东
量子位
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
F
Fortinet All Blogs
The Cloudflare Blog
T
Tailwind CSS Blog
G
Google Developers Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
腾讯CDC

博客园 - badwood

iptables规则笔记 主机基线脚本 大模型部署手册-英伟达 大模型部署手册-昇腾服务器 ssl自签证书+nginx 备忘 Claude Code私有化使用 mindie推理框架及工程化 minio-2.使用 minio-1.搭建 旧源消失的rpm包安装-devtoolset-9 vllm-ascend 2/2 -双机推理 MCP-1.hello world vllm-ascend 1/2 -单机推理 ESP32-S3玩具1-使用Arduino evalscope使用2-使用自定义数据集压测 设置fdfs自动启动 FunASR mindie开启DeepSeek的128K xinference推理embedding等小模型 离线安装docker 昇腾910b服务器初始化 evalscope使用1-基础压测 大模型围栏-nginx+lua 大模型私有化部署-deepseek671-mindie dify-2:问题分类器调整
secueCRT脚本再试牛刀
badwood · 2026-08-21 · via 博客园 - badwood

  主机调整了登录流程,原本脚本跑不通了,今天针对新流程进行优化,有了新的心得。

1、crt.Screen.WaitForString 与crt.Screen.Get 的配合问题:crt.Screen.Get读取的是"屏幕缓冲区"的当前快照,而 SecureCRT 在收到远程数据后需要时间渲染到屏幕缓冲区。 Synchronous = True 只保证了脚本操作不被打断,但不保证屏幕缓冲区已经刷新,由于终端本身的回显渲染有延迟,而WaitForString只是等待数据流中出现该字符串,所以可能会出现等待到的字符串是上一个页面存在的内容,所以使用WaitForString,最好是等待目标页面独有的字符串,避免与旧页面内容混淆。或者使用Sleep来等待足够久的时间,再读取屏幕缓冲区来判断到了哪一页。

#$language = "VBScript"
#$interface = "1.0"

Sub Main
    crt.Screen.Synchronous = True

    If crt.Arguments.Count < 1 Then
        crt.Dialog.MessageBox "[ERROR] Need at least 1 arg (IP)"
        crt.Screen.Synchronous = False
        Exit Sub
    End If

    crt.Sleep 1000
    crt.Screen.Send "/" & crt.Arguments(0) & vbcr
    If crt.Arguments.Count < 2 Then
        crt.Screen.Synchronous = False
        Exit Sub
    End If
    crt.Screen.WaitForString "[ r ]"

    totalRows = crt.Screen.Rows
    totalCols = crt.Screen.Columns

    screenText = ""
    For i = 1 To totalRows
        lineText = crt.Screen.Get(i, 1, i, totalCols)
        lineText = RTrim(lineText)
        If lineText <> "" Then
            If InStr(lineText, "[ ") > 0 Then
                If InStr(lineText, crt.Arguments(1)) > 0 Then
                  start = InStr(lineText, "[")
                  endPos = InStr(start + 1, lineText, "]")
                  bracketContent = Mid(lineText, start + 1, endPos - start - 1)
                  crt.Screen.Send bracketContent & vbcr
                  Exit For
                End If
            End If
        End If
    Next

    If crt.Arguments.Count < 3 Then
        crt.Screen.Synchronous = False
        Exit Sub
    End If
    crt.Screen.WaitForString "Password: "
    crt.Screen.Send crt.Arguments(2) & vbcr

    If crt.Arguments.Count < 4 Then
        crt.Screen.Synchronous = False
        Exit Sub
    End If
    crt.Sleep 500
    crt.Screen.WaitForString "$"
    'crt.Screen.Send crt.Arguments(3) & " " & crt.Arguments(4) & vbcr
    crt.Screen.Send crt.Arguments(3) & vbcr
    

    crt.Screen.Synchronous = False
End Sub