Solved

Program Cisco switches by C#

Posted on 2009-05-17
3
2,520 Views
Last Modified: 2013-12-17
Hi
I want to use System.Net.Sockets.TcpClient class in .Net framework to configure a Cisco switch or router. Does anyone has any samples or how to?
I already have written the below code. When I run it, I don't get what I expect.
public class Cisco
    {
        private TcpClient _client;
 
        //private event EventHandler<
 
        private TcpClient Client
        {
            get
            {
                if (_client == null)
                    _client = new TcpClient();
                return _client;
            }
        }
 
        public Cisco(IPEndPoint endPoint)
        {
            Client.Connect(endPoint);
            var s = Read();
        }
 
        public string RunCommand(string command)
        {
            if (!command.EndsWith("\r\n"))
                command = string.Format("{0}\r\n", command);
            var buffer = ASCIIEncoding.ASCII.GetBytes(command);
            Client.GetStream().Write(buffer, 0, buffer.Length);
            var s = Read();
            return s;
        }
 
        private string Read()
        {
            var buffer = new Byte[Client.ReceiveBufferSize];
            var read = new List<string>();
            while (Client.GetStream().DataAvailable)
            {
                var state = new object[] { Client.GetStream(), buffer, null };
                var ia = Client.GetStream().BeginRead(buffer, 0, buffer.Length, new AsyncCallback(Read), state);
                ia.AsyncWaitHandle.WaitOne();
                read.Add(ASCIIEncoding.ASCII.GetString(buffer.Take((int)((object[])ia.AsyncState)[2]).ToArray()));
            }
            return string.Concat(read.ToArray());
        }
 
        private void Read(IAsyncResult ar)
        {
            var state = ar.AsyncState as object[];
            var stream = state[0] as NetworkStream;
            var buffer = state[1] as byte[];
            var br = stream.EndRead(ar);
            state[2] = br;
        }
    }
 
     static void Main(string[] args)
        {
             Cisco c = new Cisco(new IPEndPoint(IPAddress.Parse("172.16.1.147"), 23));
            Console.Write(c.RunCommand("PASSWORD"));
            Console.Write(c.RunCommand("enable"));
            Console.Write(c.RunCommand("ENABLE PASSWORD"));
            Console.Write(c.RunCommand("show run"));
            Console.Write(c.RunCommand("exit"));
            Console.Read();
        }

Open in new window

0
Comment
Question by:TheMehrdad
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 70

Accepted Solution

by:
Qlemo earned 250 total points
ID: 24406886
Telnet expects some negotiation of options like emulation, echo aso. If you like, you can have a look at the netcat source, it is a tool for streaming stuff thru a telnet connection, but be warned, it is complex and the source comments are rude :-|.

0
 
LVL 5

Author Comment

by:TheMehrdad
ID: 24412267
Dear Qlemo,
Thanks for your comment. Is there any other way to configure a Cisco Switch/Router programatically? If Telnet is the only solution, so I will deal with this netcat.
0
 
LVL 70

Expert Comment

by:Qlemo
ID: 24413387
AFAIK there is no other way.
0

Featured Post

How our DevOps Teams Maximize Uptime

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us. Read the use case whitepaper.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
Arrow Electronics was searching for a KVM  (Keyboard/Video/Mouse) switch that could display on one single monitor the current status of all units being tested on the rack.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
Finding and deleting duplicate (picture) files can be a time consuming task. My wife and I, our three kids and their families all share one dilemma: Managing our pictures. Between desktops, laptops, phones, tablets, and cameras; over the last decade…

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question