You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中如何使用 实现扫描信息的行覆盖输出?

Lua端口扫描终端输出优化方案

你的核心需求是让开放端口信息保留显示,同时让Scanning...始终在终端最后一行动态刷新,避免每次换行重复显示。以下是修改后的代码及原理说明:

修改后的代码

local socket = require("socket")

io.write("Starting scan...\n")
io.flush()

for port = 1, 65535 do
    -- 动态刷新当前扫描状态到终端最后一行
    io.write(string.format("Scanning port %d...\r", port))
    io.flush()

    local sock = socket.tcp()
    sock:settimeout(0.1) -- 设置短超时,提升扫描效率
    local success = sock:connect("192.168.88.1", port)

    if success then
        -- 换行输出开放端口信息,避免覆盖扫描状态
        io.write("\n[\27[1m\27[91m+\27[0m] Open port: " .. port)
        io.flush()
    end

    sock:close()
end

io.write("\nScan completed!\n")

关键优化点说明

  • 替换print为io.write:print会自动添加换行符,导致每次输出都换行;io.write可以手动控制输出格式,配合\r实现同一行内容覆盖。
  • 利用\r回车符:\r会将光标移到当前行开头,后续输出会覆盖该行原有内容,实现Scanning...的动态刷新效果。
  • 强制刷新缓冲区io.flush():终端输出默认有缓冲机制,调用io.flush()能确保内容立即显示,避免延迟。
  • 添加连接超时:sock:settimeout(0.1)设置短超时时间,避免单个端口连接阻塞太久,大幅提升扫描速度。

效果说明

运行后,终端会逐行保留所有开放端口的信息,同时最后一行持续显示当前扫描的端口状态,不会重复换行打印Scanning...,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Saviam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:09:28