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

DOS下Telnet连接正常但被清屏无法查看回复,重定向无效如何解决?

解决Windows下Telnet无法捕获TCP响应的问题

为什么重定向输出为空?

Windows自带的telnet.exe是交互式控制台程序,它的输出直接写入控制台窗口缓冲区,而非标准输出(stdout),所以用>重定向无法捕获内容。

可行的解决方案

1. 用PowerShell编写简易TCP客户端(推荐)

直接用PowerShell建立TCP连接,读取响应并过滤转义序列,完全可控:

$hostName = "remoteHost"
$port = portNumber
$tcpClient = New-Object System.Net.Sockets.TcpClient($hostName, $port)
$stream = $tcpClient.GetStream()
$reader = New-Object System.IO.StreamReader($stream)

# 读取响应(可根据需求调整读取逻辑,比如读单行或全部内容)
$response = $reader.ReadToEnd()

# 移除ANSI转义序列(包括清屏指令ESC[2J)
$cleanResponse = $response -replace "`e\[[0-9;]*[a-zA-Z]", ""

# 同时输出到文件和控制台
$cleanResponse | Out-File -FilePath .\tmp\result -Encoding utf8
Write-Host $cleanResponse

# 关闭连接释放资源
$reader.Close()
$stream.Close()
$tcpClient.Close()

替换脚本中的remoteHost和portNumber为实际值,运行后就能得到清理后的响应内容。

如果你有PuTTY套件,plink.exe支持将Telnet会话的输出定向到标准输出,这样就能用重定向捕获:

plink -telnet remoteHost portNumber > .\tmp\result

之后可以用PowerShell过滤转义序列,得到干净的内容:

(Get-Content .\tmp\result) -replace "`e\[[0-9;]*[a-zA-Z]", "" | Out-File .\tmp\clean_result

3. 临时应急:控制台复制后手动清理

如果只是临时操作,运行telnet后右键控制台窗口选择「标记」,选中响应内容复制,粘贴到文本编辑器后,用正则替换(匹配\x1B\[[0-9;]*[a-zA-Z])移除所有ANSI控制序列,也能看到实际响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:54:18