【问题标题】:C# Telnet LibraryC# Telnet 库
【发布时间】:2010-09-28 06:12:47
【问题描述】:

是否有可用于 C#(不是 ASP .NET)的良好、免费的 telnet 库?我在 google 上找到了一些,但它们都有一个或另一个问题(不支持登录名/密码,不支持脚本模式)。

我假设 MS 仍然没有包含 telnet 库作为 .NET v3.5 的一部分,因为如果是的话我找不到它。不过,我很可能是错的。

【问题讨论】:

  • 接受的答案是最终的解决方案。我不知道它是否仍然可用,但在接受答案时,Minimalistic Telnet 的源代码是可用的。

标签: c# .net telnet


【解决方案1】:

我非常怀疑 telnet 库是否会成为 .Net BCL 的一部分,尽管您确实拥有几乎完整的套接字支持,因此模拟 telnet 客户端不会太难,Telnet 在其一般实现中是一个遗产并且正在消亡现有的技术通常位于一个漂亮的新现代外观后面。对于 Unix/Linux 变体,您会发现开箱即用的 SSH 和启用 telnet 通常被认为是不好的做法。

您可以查看: http://granados.sourceforge.net/ - .Net 的 SSH 库 http://www.tamirgal.com/home/dev.aspx?Item=SharpSsh

您仍然需要放置自己的包装器来处理事件,以便以脚本方式输入输入。

【讨论】:

  • 问题是我正在尝试远程登录到仅启用了远程登录的远程设备。我不是要设置机器。 SSH 不是一个选项。 Telnet 是唯一的选择。我可以手动运行命令,也可以使用一个小程序为我执行此操作。感谢您的链接。
  • 您肯定已经想到,这家伙对使用 Telnet 或 SSH 的服务器无话可说?只是一个线索。
  • @Matt 你会惊讶于有多少公司在他们的 Day2Day 业务中仍然使用 Telnet 等旧技术:/
【解决方案2】:

我最终找到了 MinimalistTelnet 并将其改编为我的用途。由于我试图附加的唯一**设备,我最终需要能够大量修改代码。

** 在这种情况下唯一可以有效地解释为脑死亡。

【讨论】:

    【解决方案3】:

    我目前正在评估两个可能感兴趣的 .NET (v2.0) C# Telnet 库:

    希望这会有所帮助。

    问候, 安迪。

    【讨论】:

      【解决方案4】:

      我发现的最佳 C# Telnet Lib 称为 Minimalistic Telnet。非常容易理解、使用和修改。它非常适合我需要配置的 Cisco 路由器。

      http://www.codeproject.com/KB/IP/MinimalisticTelnet.aspx

      【讨论】:

      • 由于您概述的原因,这正是对我有用的方法。我很高兴我不是一个人喜欢它。 :)
      • 简约的 telnet 非常适合我和我们的 LAN 团队。我最终修改它以从文本文件中读取命令,以便我们的 LAN 团队可以轻松部署它。
      • 也开始使用了。很棒的发现。
      • 这也是迄今为止我发现的最好的例子。如果有人感兴趣,我的衍生/更新作品在 GitHub 上,并在 NuGet 上发布。 github.com/9swampy/Telnet
      • 感谢 @9swampy 在 GitHub 上提供更新版本。此评论应作为答案的更新包含在内,因为它很难找到,而且您的版本比原始版本有很大改进。
      【解决方案5】:

      另一个概念不同的人:http://www.klausbasan.de/misc/telnet/index.html

      【讨论】:

        【解决方案6】:

        另一个,它是一个较旧的项目,但共享完整的源代码:http://telnetcsharp.codeplex.com/

        【讨论】:

          【解决方案7】:

          这是我的代码终于可以工作了

          using System;
          using System.IO;
          using System.Net;
          using System.Net.Sockets;
          using System.Text.RegularExpressions;
          using System.Threading;
          
          class TelnetTest
          {
          
              static void Main(string[] args)
              {
                  TelnetTest tt = new TelnetTest();
          
                  tt.tcpClient = new TcpClient("myserver", 23);
                  tt.ns = tt.tcpClient.GetStream();
          
                  tt.connectHost("admin", "admin");
                  tt.sendCommand();
          
                  tt.tcpClient.Close();
              }
          
          public void connectHost(string user, string passwd) {
              bool i = true;
              while (i)
              {
                  Console.WriteLine("Connecting.....");
                  Byte[] output = new Byte[1024];
                  String responseoutput = String.Empty;
                  Byte[] cmd = System.Text.Encoding.ASCII.GetBytes("\n");
                  ns.Write(cmd, 0, cmd.Length);
          
                  Thread.Sleep(1000);
                  Int32 bytes = ns.Read(output, 0, output.Length);
                  responseoutput = System.Text.Encoding.ASCII.GetString(output, 0, bytes);
                  Console.WriteLine("Responseoutput: " + responseoutput);
                  Regex objToMatch = new Regex("login:");
                  if (objToMatch.IsMatch(responseoutput)) {
                     cmd = System.Text.Encoding.ASCII.GetBytes(user + "\r");
                     ns.Write(cmd, 0, cmd.Length);
                  }
          
                  Thread.Sleep(1000);
                  bytes = ns.Read(output, 0, output.Length);
                  responseoutput = System.Text.Encoding.ASCII.GetString(output, 0, bytes);
                  Console.Write(responseoutput);
                  objToMatch = new Regex("Password");
                  if (objToMatch.IsMatch(responseoutput))
                  {
                      cmd = System.Text.Encoding.ASCII.GetBytes(passwd + "\r");
                      ns.Write(cmd, 0, cmd.Length);
                  }
          
                  Thread.Sleep(1000);
                  bytes = ns.Read(output, 0, output.Length);
                  responseoutput = System.Text.Encoding.ASCII.GetString(output, 0, bytes);
                  Console.Write("Responseoutput: " + responseoutput);
          
                  objToMatch = new Regex("#");
                  if (objToMatch.IsMatch(responseoutput))
                  {
                      i = false;
                  }
          
              }
          
              Console.WriteLine("Just works");
          }
          }
          

          【讨论】:

          • 好的。粗糙且准备就绪并且大部分时间都可以工作,但是我建议在 .Read() 之前检查是否存在 ns.DataAvailable 因为可能没有响应,并且您将永远阻塞;还要将 .Read() 粘贴在循环中以继续阅读,因为您可能没有一口气读取所有数据。
          • tcpClient 字段在哪里?
          • ns 变量指的是什么?
          猜你喜欢
          • 2012-08-15
          • 2014-08-08
          • 2011-08-24
          • 2010-11-17
          • 2011-04-30
          • 2015-01-21
          • 2011-02-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多