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为实际值,运行后就能得到清理后的响应内容。
2. 使用PuTTY的plink.exe工具
如果你有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
相关产品推荐
相关产品推荐

