创建与多个服务器的 Telnet 连接并记录欢迎消息

创建与多个服务器的 Telnet 连接并记录欢迎消息

我需要远程确定大量计算机上安装的 FileZilla Server 版本。

我知道如果我初始化与 FZ 服务器的 Telnet 连接,我将收到包含服务器版本的响应,然后连接将挂起,直到使用以下命令终止辞职Ctrl+C或者通过终止进程。

我正在寻找一种方法来遍历服务器列表,与每个服务器建立 Telnet 连接,并将消息与服务器版本一起记录在文件中。如果有更优雅的方式来获取这些信息,我愿意倾听 - 但这是我能想到的最好的方法。

我尝试寻找答案,但大多数情况下只需要检查连接(即服务器是否在线),因此测试连接等就可以起作用。

我目前拥有的:

  • 使用 plink、puTTY CMD 界面(所以我有一个可编写脚本的 Telnet 客户端)
  • 使用 Powershell,因为我了解它比 Windows CMD 脚本更好,但我愿意接受其他语言的答案。

我的主要问题是将响应保存到某个地方。Plink 在连接时会打开一个新会话,我一直在努力将响应保存到主脚本日志文件中(或根本不保存)

这将调用一个新的 plink 会话,但我无法让它将输出发送到文件。

MyPC>Start-Process 'plink.exe' -ArgumentList '-telnet', '$IP', '-P', '$PORT'

给我这个:

220-FileZilla Server version 0.9.43 beta
220-written by Tim Kosse ([email protected])
220 Please visit http://sourceforge.net/projects/filezilla/

但是,下面的代码不会将该消息发送到文件。我尝试过2>3>以防它被发送到错误流或类似流,但没有任何效果——它总是创建一个空文件。

Start-Process 'plink.exe' -ArgumentList '-telnet', '$IP', '-P', '$PORT' > C:\Temp\testps2.txt

我要么忽略了一些令人难以置信的简单的事情,要么就是那些在原理上看起来很简单,但在实践中却非常复杂的事情之一。

我的第二步是在新会话打开后(并捕获欢迎消息后)自动关闭它们 - 但直到我能够捕获欢迎消息之前,进一步查看没有什么意义。

如有任何帮助或想法,我将不胜感激;我有点不知所措。

答案1

尽管 FTP 最初是基于 Telnet 的,但它并不是真的“Telnet 连接”。无论从哪方面看,它都是一个非常通用的 ASCII-over-TCP 协议,与 Telnet 只有一些相似之处。

(你仍然可以使用 Telnet 客户端连接到 FTP 服务器的真正原因是,所有 Telnet 握手都是在线进行的因为您的 Telnet 客户端在连接到标准 23 以外的其他端口时会禁用其中的大部分。)

因此,将问题视为从 TCP 服务器而不是 Telnet 服务器收集横幅会更容易,因为这样您就可以使用 .NET 提供的常规 TCP 套接字支持(所有这些都可用于 PowerShell)。换句话说,您可以完全留在 PowerShell 中(或通过 Add-Type 使用 C#,但这不是必需的),而不是分叉子进程。

我发现了一个 StackOverflow示例脚本它的功能非常相似(事实上,它处理 FTP),所以我从那里开始 - 删除“Read-Host”位;调整循环以在爆发之前收集尽可能多的可用数据(可选择发送QUIT`r`n);将其全部放入 PS 函数中。

相关内容