Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2013, 11:18   #1
fsn
 
Регистрация: 03.10.2013
Сообщений: 5
По умолчанию Telnet

Уважаемые форумчане!

Пытаюсь сделать приложение, которое бы могло подключаться к удаленному хосту по telnet и передавать определенные команды. На удаленном хосте telnet-сессия открывается, но на команды хост не реагирует. Что я сделал неправильно? Кодировки я все пробовал:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace ConsoleTelnet
{
    class Program
    {
        public static string GetAnswer(TcpClient tc)
        {
            NetworkStream netStream = tc.GetStream();
            byte[] bytes = new byte[tc.ReceiveBufferSize];
            netStream.Read(bytes, 0, (int)tc.ReceiveBufferSize);
            string returndata = Encoding.ASCII.GetString(bytes);
            return ("This is what the host returned to you: " + returndata);
        }

        static void SendCmd(TcpClient tc, string cmd)
        {
            NetworkStream netStream = tc.GetStream();
            if (netStream.CanWrite)
            {
                Byte[] sendBytes = Encoding.ASCII.GetBytes(cmd + "\r");
                netStream.Write(sendBytes, 0, sendBytes.Length);
            }
            Thread.Sleep(1000);
        }


        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            IPAddress adress = IPAddress.Parse("IP-адрес");
            IPEndPoint host = new IPEndPoint(adress, 23);
            TcpClient tcpClientt = new TcpClient();
            tcpClientt.Connect(host);
            Thread.Sleep(100);
 
            Console.WriteLine(Program.GetAnswer(tcpClientt));
            SendCmd(tcpClientt, "Login");          
            Console.WriteLine(Program.GetAnswer(tcpClientt));         
            SendCmd(tcpClientt, "Password");
            Console.WriteLine(Program.GetAnswer(tcpClientt));
            SendCmd(tcpClientt, "taskkill /im Twin.exe");
            Console.WriteLine(Program.GetAnswer(tcpClientt));
            Console.ReadLine();      
        }
    }
}
Заранее благодарен за помощь.
fsn вне форума Ответить с цитированием
Старый 03.10.2013, 19:28   #2
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

Подключился ч\з Ваше творение а 1ый найденный в инете телнет сервер (телехак чего то там) - работает (под отладчиком проверял).

Имхо, что-то из:
1) настройки сервера Вашего(ставить сниффер какой то на сервер и смотреть что реально приходит туда)
2) соединение медленное(не успевает он Вам ответить просто - надо ставить проверки в код на наличие данных в потоке перед чтением и валидность данных после чтения)?
simples вне форума Ответить с цитированием
Старый 03.10.2013, 20:45   #3
fsn
 
Регистрация: 03.10.2013
Сообщений: 5
По умолчанию

Спасибо за ответ.

Вообще-то скорость соединения 100мБ/с, а telnet-клиент Absolute Telnet работает нормально. Удаленный хост - промышленный компьютер с Windows XP Embedded.
Попробую сниффером посмотреть.
fsn вне форума Ответить с цитированием
Старый 06.10.2013, 20:23   #4
fsn
 
Регистрация: 03.10.2013
Сообщений: 5
По умолчанию

Этот код не работает когда соединяешься с удаленным хостом на Windows (пробовал Windows Server 2003 и Windows XP). А пробовал коннектится с маршрутизатором Cisco все прекрасно работает правда в консоль немножко ответы не так выводятся (с многими \n), но это уже мелочи, по крайней мере команды принимает и выводит ответы на них в консоль. А соединяешься с оборудованием на Windows даже приглашение на вход не выводится (Telnet сервер включен, настроен, Firewall выключен). Программа Absolute Telnet работает нормально. Кто нибудь знает в чем проблема?
fsn вне форума Ответить с цитированием
Старый 07.10.2013, 06:29   #5
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

Цитата:
Сообщение от simples Посмотреть сообщение
надо ставить проверки в код на наличие данных в потоке перед чтением и валидность данных после чтения)?
Я бы покопал в эту сторону.
simples вне форума Ответить с цитированием
Старый 09.10.2013, 14:54   #6
fsn
 
Регистрация: 03.10.2013
Сообщений: 5
По умолчанию

Кое-что понял. В Windows не проходит авторизацию. Реализация telnet-протокола в Windows отличается тем, что в конце каждой команды надо передавать CR/LF, а в Unix-системах только CR. Как это сделать?
fsn вне форума Ответить с цитированием
Старый 10.10.2013, 09:14   #7
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

Заменить

Цитата:
Сообщение от fsn Посмотреть сообщение
Код:
                Byte[] sendBytes = Encoding.ASCII.GetBytes(cmd + "\r");
на
Код:
                Byte[] sendBytes = Encoding.ASCII.GetBytes(cmd + "\r\n");
simples вне форума Ответить с цитированием
Старый 19.10.2013, 18:56   #8
fsn
 
Регистрация: 03.10.2013
Сообщений: 5
По умолчанию

Наконец-то получилось. Первоначальный код конечно неправильный, он подходит для Unix-систем, а для Windows Telnet сервера все по другому. Мне помог сниффер. Подключался к удаленной системе Absolute Telnet и сниффером отслеживал все команды telnet-протокола. Клиент и сервер сначала обмениваются стандартными протокольными командами, договариваются о размере окна, типе терминала (RFC-1700) и прочее. Если кому-то надо подробнее - обращайтесь.
Спасибо всем.
fsn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка в telnet demon-sheff Общие вопросы Delphi 2 31.05.2013 06:03
работа с telnet'ом tranvay Помощь студентам 2 03.08.2011 10:49
Взаимодействие с Telnet на C# Mixim C# (си шарп) 1 30.03.2011 11:51
telnet c++ Mu$T@nG Помощь студентам 19 12.08.2010 18:55