54 votes

Bibliothèque Telnet C#

Existe-t-il une bonne bibliothèque telnet gratuite disponible pour C# (pas ASP .NET) ? J'en ai trouvé quelques unes sur google, mais elles ont toutes un problème ou un autre (ne supportent pas le login/mot de passe, ne supportent pas un mode script).

Je suppose que MS n'a toujours pas inclus de bibliothèque telnet dans la version 3.5 de .NET, car je n'ai pas pu la trouver si c'était le cas. Je serais ravi de me tromper.

0 votes

La réponse acceptée est la solution finale. Je ne sais pas si elle est toujours disponible, mais au moment où la réponse a été acceptée, le code source de Minimalistic Telnet était disponible.

52voto

Richard Points 336

La meilleure librairie Telnet C# que j'ai trouvée s'appelle Minimalistic Telnet. Très facile à comprendre, à utiliser et à modifier. Elle fonctionne très bien pour les routeurs Cisco que je dois configurer.

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

1 votes

C'est exactement celui qui a fonctionné pour moi, pour les raisons que vous avez exposées. Je suis content de ne pas être le seul à l'apprécier. :)

0 votes

Le telnet minimaliste a parfaitement fonctionné pour moi et notre équipe du réseau local. J'ai fini par le modifier pour qu'il puisse lire les commandes d'un fichier texte afin que notre équipe de réseau local puisse le déployer facilement.

0 votes

J'ai commencé à l'utiliser aussi. Belle trouvaille.

11voto

Prakash Points 29

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");
}
}

2 votes

Ok, c'est à peu près ça et ça fonctionne en grande partie, mais je suggérerais de vérifier avant le .Read() s'il y a ns.DataAvailable parce qu'il pourrait ne pas y avoir de réponse, et vous seriez bloqué pour toujours ; mettez également le .Read() dans une boucle pour continuer à lire, car vous pourriez ne pas avoir lu toutes les données en une seule fois.

3 votes

Où se trouve tcpClient champ ?

3 votes

A quoi fait référence la variable ns ?

3voto

HOWA Points 21

Un autre avec un concept différent : http://www.klausbasan.de/misc/telnet/index.html

2voto

Scott Points 21

Voici une bibliothèque telnet et un programme qui l'utilise à titre d'exemple. Toutes les sources (y compris celles de la bibliothèque) se trouvent en bas de l'article.

Cet exemple permet de se connecter à un routeur Cisco et de télécharger la configuration.

http://www.xpresslearn.com/networking/code/csharp-telnet-client

1voto

salt.racer Points 4715

J'ai fini par trouver MinimalisteTelnet et je l'ai adapté à mes besoins. J'ai fini par avoir besoin de pouvoir modifier fortement le code en raison du dispositif unique** auquel je tente de me connecter.

** Unique dans ce cas peut être valablement interprété comme une mort cérébrale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X