Question
Y at-il une bonne bibliothèque telnet libre disponible pour C # (non ASP .NET)? Je l'ai trouvé un peu sur google, mais ils ont tous un problème ou d'une autre (ne prennent pas en charge login / mot de passe, ne prennent pas en charge un mode scénarisé).
Je suppose que MS n'a pas encore fourni une bibliothèque telnet dans le cadre de v3.5 .NET comme je ne pouvais pas trouver si elle était. Je loooooove à tort cependant.
La solution
Best C # Telnet Lib J'ai trouvé est appelé Minimaliste Telnet. Très facile à comprendre, utiliser et modifier. Il fonctionne très bien pour les routeurs Cisco que je dois configurer.
Autres conseils
Voici mon code qui fonctionne enfin
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");
}
}
Un autre avec un concept différent: http://www.klausbasan.de/ divers / telnet / index.html
Je doute fort une bibliothèque telnet sera jamais partie du .Net BCL, bien que vous avez le soutien socket presque complet, donc ce ne serait pas trop difficile à imiter un client Telnet, Telnet dans sa mise en œuvre générale est un héritage et mourir technologie où existe se trouve généralement derrière une belle nouvelle façade moderne. En termes d'Unix / Linux variantes, vous trouverez que la boîte et son SSH permettant telnet est généralement considéré comme une mauvaise pratique.
Vous pouvez consulter: http://granados.sourceforge.net/ - Bibliothèque SSH pour .Net http://www.tamirgal.com/home/dev.aspx?Item= SharpSsh
Vous aurez toujours besoin de mettre en place votre propre emballage pour gérer les événements pour l'alimentation en entrée d'une manière scriptée.
J'ai fini par trouver MinimalistTelnet et adapté à mes usages. J'ai fini par avoir besoin de pouvoir modifier fortement le code en raison de l'appareil ** unique qui je tente de joindre à.
** Unique dans ce cas peut être valablement interprété comme mort cérébrale.
Je suis en train d'évaluer deux .NET (v2.0) C # bibliothèques Telnet qui peuvent vous intéresser:
Hope this helps.
Cordialement, Andy.
Un autre, il est un ancien projet, mais partage le code source complet: http://telnetcsharp.codeplex.com/