BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Как се прави връзка пo Telnet
patrik5
Публикувано на: 06-01-2018, 23:52
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 240
Регистриран на: 07.10.11



Здравейте искам да се вържа по мрежата към устройство по телнет. Какъв е правилния начин да се вържем и да видим какво ни изпраща устройството. Това е кода който написах, но не ми връща нищо от отсрещната страна. Стига до Socket clientCatc = recive.Accept(); и нищо не се случва. Някой с опит с този протокол да сподели
CODE


static void Main(string[] args)
       {
           byte[] bytes = new byte[116];
           IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
           IPAddress ipAddress = IPAddress.Parse("10.50.77.100");
           IPEndPoint remoteEP = new IPEndPoint(ipAddress, 23);


           //
           Socket recive = new Socket(AddressFamily.InterNetwork,  SocketType.Stream, ProtocolType.Tcp);//нов сокет

           IPEndPoint ipepRecive = new IPEndPoint(IPAddress.Any,23); // Къде да се върже сокета
///////////////////////////////////////////////////////////////////////////////////////////////////////

           // Create a TCP/IP  socket.
           Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           try
           {

               sender.Connect(remoteEP);
               Console.WriteLine("Socket connected to {0}",sender.RemoteEndPoint.ToString());
               byte[] msg = Encoding.ASCII.GetBytes("SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS" + "\r\n");
               int bytesSent = sender.Send(msg);
               //// Чакаме отговор

               recive.Bind(ipepRecive);

               recive.Listen(10);// колко да е дълга опашката
               Socket clientCatc = recive.Accept();// нов клиент
             //  IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;// взима информацията

               byte[] data = new byte[512];//137

               int recv = clientCatc.Receive(data);
               string lineLog = Encoding.ASCII.GetString(data, 0, recv);
               if(lineLog.Equals("ENTER USER NAME"))
               {
                   sender.Close();
                   sender.Disconnect(true);
                   recive.Close();
                   recive.Disconnect(true);
               }

               sender.Close();
               sender.Disconnect(true);
               recive.Close();
               recive.Disconnect(true);
           }
           catch
           {
               //  sender.Shutdown()
               sender.Disconnect(true);
               sender.Close();
               
               recive.Disconnect(true);
               recive.Close();
               


           }
          // sender.e

       }

PMEmail Poster
Top
Altotas
Публикувано на: 07-01-2018, 00:13
Quote Post



Име:
Група: Форумен член
Ранг: Новопостъпил

Мнения: 12
Регистриран на: 06.01.18



telnet host port

примерно: telnet localhost 8081

----

Това което ти си написал е пълен шит. Телнет клиента е активната страна която се свързва към сървъра, а не accept()-ва никакви входящи връзки, което е вече работа на сървъра.

Това мнение е било редактирано от Altotas на 07-01-2018, 00:16


--------------------
PMEmail Poster
Top
patrik5
Публикувано на: 07-01-2018, 00:28
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 240
Регистриран на: 07.10.11



Да, а не трябва ли да върне нещо за да му въведа паролата и юзернейма. Когато изпратя някаква команда към сървъра как да прочета неговия отговор. Примерно когато съм пробвал да се вържа с директана комуникация през хипертерминал и трябва да вкарам няколко ssssssss и когато натисна ентър ми връща да вкарам юзер.
Как да го направя като код, смисъл как да вкарам узер и пас и да видя какво ми връща устройството?
PMEmail Poster
Top
gat3way
Публикувано на: 07-01-2018, 00:43
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1869
Регистриран на: 22.06.12



И да беше клиент, телнет протокола е малко по-различна работа от просто TCP връзка където каквото пратиш се получава отсреща както е прието и не подлежи на интерпретация. Може да е близко до това, но не е същото. Може дори да работи и така, но това не става по подразбиране, трябва да се прати нужната команда. По подразбиране, всички символи които пращаш са 7-битови, осмия бит се игнорира. Така, всичко което пращаш примерно на кирилица - без значение от енкодинга, отсреща ще излиза насрано.
PMEmail Poster
Top
patrik5
Публикувано на: 07-01-2018, 00:59
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 240
Регистриран на: 07.10.11



Ок кода до тук мисля че е верен
CODE
Socket recive = new Socket(AddressFamily.InterNetwork,  SocketType.Stream, ProtocolType.Tcp);//нов сокет

          IPEndPoint ipepRecive = new IPEndPoint(IPAddress.Any,23); // Къде да се върже сокета
///////////////////////////////////////////////////////////////////////////////////////////////////////

          // Create a TCP/IP  socket.
          Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
          try
          {

              sender.Connect(remoteEP);
              Console.WriteLine("Socket connected to {0}",sender.RemoteEndPoint.ToString());
              byte[] msg = Encoding.ASCII.GetBytes("SSSSSS" + "\r\n");
              int bytesSent = sender.Send(msg);
             

Въпроса е какво да направя за да прочета отговора. Със стимриидър или след като казваш че не може да аксептне връзката със сървъра?
PMEmail Poster
Top
thrawn
Публикувано на: 07-01-2018, 08:34
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1180
Регистриран на: 17.01.17



Telnet ползва специфичен протокол за комуникация. Тук я коментирахме темата.
PMEmail Poster
Top
patrik5
Публикувано на: 07-01-2018, 11:44
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 240
Регистриран на: 07.10.11



В тази тема не разбрах как да слуша за травфик
PMEmail Poster
Top
thrawn
Публикувано на: 07-01-2018, 11:51
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1180
Регистриран на: 17.01.17



Какво значи "как да слуша за трафик" ? Комуникацията няма никаква особеност. Спецификата е в протокола който се ползва. За да получиш някакво смислено поведение от telnet, трябва да му подадеш смислена команда (или да отговориш адекватно на това което ти подава).
PMEmail Poster
Top
patrik5
Публикувано на: 07-01-2018, 12:39
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 240
Регистриран на: 07.10.11



QUOTE (thrawn @ 07-01-2018, 11:51)
Какво значи "как да слуша за трафик" ? Комуникацията няма никаква особеност. Спецификата е в протокола който се ползва. За да получиш някакво смислено поведение от telnet, трябва да му подадеш смислена команда (или да отговориш адекватно на това което ти подава).

CODE

Socket recive = new Socket(AddressFamily.InterNetwork,  SocketType.Stream, ProtocolType.Tcp);//нов сокет

         IPEndPoint ipepRecive = new IPEndPoint(IPAddress.Any,23); // Къде да се върже сокета
///////////////////////////////////////////////////////////////////////////////////////////////////////

         // Create a TCP/IP  socket.
         Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
         try
         {

             sender.Connect(remoteEP);
             Console.WriteLine("Socket connected to {0}",sender.RemoteEndPoint.ToString());
             byte[] msg = Encoding.ASCII.GetBytes("SSSSSS" + "\r\n");
             int bytesSent = sender.Send(msg);

Как да приема това което ще ми върне при поддаване на SSSSSSSS (При поддаване на SSSS трябва да върне ENTER USERNAME) Как да го прихвана това?
PMEmail Poster
Top
Altotas
Публикувано на: 07-01-2018, 12:41
Quote Post



Име:
Група: Форумен член
Ранг: Новопостъпил

Мнения: 12
Регистриран на: 06.01.18



QUOTE (patrik5 @ 07-01-2018, 12:39)
QUOTE (thrawn @ 07-01-2018, 11:51)
Какво значи "как да слуша за трафик" ? Комуникацията няма никаква особеност. Спецификата е в протокола който се ползва. За да получиш някакво смислено поведение от telnet, трябва да му подадеш смислена команда (или да отговориш адекватно на това което ти подава).

CODE

Socket recive = new Socket(AddressFamily.InterNetwork,  SocketType.Stream, ProtocolType.Tcp);//нов сокет

         IPEndPoint ipepRecive = new IPEndPoint(IPAddress.Any,23); // Къде да се върже сокета
///////////////////////////////////////////////////////////////////////////////////////////////////////

         // Create a TCP/IP  socket.
         Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
         try
         {

             sender.Connect(remoteEP);
             Console.WriteLine("Socket connected to {0}",sender.RemoteEndPoint.ToString());
             byte[] msg = Encoding.ASCII.GetBytes("SSSSSS" + "\r\n");
             int bytesSent = sender.Send(msg);

Как да приема това което ще ми върне при поддаване на SSSSSSSS (При поддаване на SSSS трябва да върне ENTER USERNAME) Как да го прихвана това?

много просто - четеш от InputStream-a на сокета

https://msdn.microsoft.com/en-us/library/8s...(v=vs.110).aspx

Това мнение е било редактирано от Altotas на 07-01-2018, 12:42


--------------------
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0