Delphi i Telnet

0

Udało mi się nawiązać połączenie pomiędzy klientem a serwerem ale w troszkę mniej typowy sposób czyli telnetem
Teraz jeśli koś wpisuje sobie w uruchom telent XXXXXXX 23 uruchamia mu się telnet bez żadnych napisów <ort>po prostu</ort> czyste okno, wystarczy np wpisać w tym czystym okienku komunikat i aplikacja serwera automatycznie wyświetla komunikat o jakiejś tam treści którą wcześniej przygotowałem,
ponieważ w serwerze jest instrukcja :

wiadomosc := Socket.ReceiveText;
if wiadomosc = 'komunikat' then showmessage('Odebrałem');

============
Moje pytanie jak zrobić by w telnecie również wyskakiwał mi tekst np przy logowaniu się telnet XXXXX 23 wyskoczyło HELLLO COŚ TAM COŚTAM wpisz HELP a uzyskasz pomoc itd itd itd, bym miał normalny wykaz dysków itd no <ort>po prostu</ort> żeby wyglądało standardowo jak np Dos,
Ps. mam już 50 % sukcesu <ort>na razie</ort> telnet działa i wykonuje polecenia serwera, ale okno jest czyste heh
SĄDZE ŻE TO MOŻE BYĆ PRZYDATNE:
Uważam że chodzi tu o procedurkę ServerClientConnect ponieważ wpisałem w niej showmessage('HELLO'); i gdy tylko połączyłem się telnetem wyskoczył mi właśnie ten komunikat ale w osobnym okienku, jaki jest więc kod by wyskoczyło to w oknie telnetu.

0

niech aplikacja (serwer) wysyla do klienta (okno telnetowe) wiadomosci

czyli np:

if OdebranyText='Hello' then
begin
WyslijNaOkno('Jak sie masz');
end else begin
ZrobCosinnego;
end;

to tylko przyklad struktury

0

WyslijNaOkno('Jak sie masz');
ale właśnie konkretnie jak wysłać na okno właśnie tego nieoruzmiem, albo <ort>po prostu</ort> nieznam procedurki
ma ktoś właśnie jakiś konkretny pomysł ? konkretnie jak wysłać ten tekst na okno telnetu

0

SendText('Komunikat'+#13+#10); //To #13+#10 to jest znak nowej linii.

0

eh no nietak do końca ponieważ sendtext nie odwoła mi tego tekstu do telnetu, przecież samo polecenie SendText('Komunikat'+#13+#10); nie istnieje , jeśli bym dodał Client.socket.SendText('Komunikat'+#13+#10); owszem ale ja nie chcę do klijenta tylko na telnet ... a polecenie Telnet.SendText..... nie istnieje
więc ?

0

przeciez telnet jest w tym wypadku klientem...
wiec z sewera wysylasz tylko tekst na okreslone IP i PORT
reszta zajmuje sie telnet

wiec zamiast negowac - sprawdz wpierw

Pisane z nudow:

unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    StatusBar1: TStatusBar;
    ServerSocket1: TServerSocket;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Port := 23;
ServerSocket1.Active := True;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.Active := false;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  i:integer;
  Msg : string;
begin
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
  begin
    with ServerSocket1.Socket.Connections[i] do
    begin
      Msg := ReceiveText;
      if Msg <> '' then
      begin
        Memo1.Lines.Add(RemoteAddress + ' wyslal :') ;
        Memo1.Lines.Add(Msg);
        Socket.SendText('< '+Socket.LocalAddress+' > wyslales mi '+Msg);
        Socket.SendText(#10+#13+'< '+Socket.RemoteAddress+' > ');
{ zeby ladniej wygladalo dodajemy "znaki zachety" }
      end;
    end;
  end;
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Socket.SendText('Witaj, polaczyles sie ze mna z:'+#10+#13+
'IP :'+Socket.RemoteAddress+#10+#13+
'Host :'+Socket.RemoteHost+#10+#13+
'Napisz jakis tekst, a ja ci go odesle'+#10+#13+
'Ok?, no to co ? zaczynamy'+#10+#13+#10+#13+);
'< '+Socket.RemoteAddress+' > ');
end;

end.

</b>
Testowane z telnetu z mego serwera na moj komputer domowy

<font color="green">[satanbsd.org]#[karol] >></span> telnet 192.168.1.10 23
Trying 192.168.1.10...
Connected to karol.
Escape character is '^]'.
Witaj, polaczyles sie ze mna z:
IP :192.168.1.1
Host :
Napisz jakis tekst, a ja ci go odesle
Ok?, no to co? zaczynamy

< 192.168.1.1 > test
< 192.168.1.10 > wyslales mi test

< 192.168.1.1 > co tam?
< 192.168.1.10 > wyslales mi co tam?

< 192.168.1.1 > ^]
telnet> close
Connection closed.
<font color="green">[satanbsd.org]#[karol] >></span>

0

dzięki ogromne ale ja to zrobiłem w troszkę inny <ort>prostrzy</ort> sposób jak przedmówca mówił czyli:

unit Unit1;

interface

uses
Windows,WinSock, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp;

type
TForm1 = class(TForm)
Server: TServerSocket;
procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
wiadomosc,pomoc:string;
begin

wiadomosc := Socket.ReceiveText;
if wiadomosc = 'T' then Server.Socket.Connections[Server.Socket.ActiveConnections -1].SendText(#13+#10+'HELP HELP HELP TO JEST TEST'+#13+#10);
end;

procedure TForm1.ServerClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Server.Socket.Connections[Server.Socket.ActiveConnections -1].SendText('Witaj w wierszu poleceń+#13+#10);
Server.Socket.Connections[Server.Socket.ActiveConnections -1].SendText('Wpisz komende Start jesli chcesz zacząc pracę w terminalu'+#13+#10);
end;
end.


teraz tak widzę że masz ten sam problem co ja mianowicie jeśli porównuje tekst wpisany w telnecie z tym w programie czyli jeśli gość wpisze help to program nie odczytuje tego jako help tylp h+e+l+p i tu mam problem bo nie wiem jak to porównać w serwerze
if wiadomosc= 'help' then instrukcje <=nie działa
if wiadomosc='h'+'e'+'l'+'p'+#13+#10 then instrukcje <=również nie działa
mogę jedynie zrobić tak
if wiadomosc='H' then showmessage('np obsługa programu');
{ale to chyba zbyt uciążliwe :) i nie wiem właśnie jak zrobić by może było porównywać cały ciąg znaków a nie tylko jedną literkę

Świetnie zdaję sobie sprawę że np na putty będzie działać i niebędzie problemu z porównywaniem ( z taka opinią spotkałem się na innym forum) ale MOWA o telnecie windowsa
OGROMNE DZIĘKI

0

teraz tak widzę że masz ten sam problem co ja mianowicie jeśli porównuje tekst wpisany w telnecie z tym w programie czyli jeśli gość wpisze help to program nie odczytuje tego jako help tylp h+e+l+p i tu mam problem bo nie wiem jak to porównać w serwerze

ale ja nie mam z tym problemu
Nie bede ci przeciez podawal gotowego kodu..to ty masz SAM do niego dojsc
Pobaw sie tym:

case OdebranaInstrukcja of

if wiadomosc= 'help' then instrukcje <=nie działa
if wiadomosc='h'+'e'+'l'+'p'+#13+#10 then instrukcje <=również nie działa
mogę jedynie zrobić tak
if wiadomosc='H' then showmessage('np obsługa programu');
{ale to chyba zbyt uciążliwe :) i nie wiem właśnie jak zrobić by może było porównywać cały ciąg znaków a nie tylko jedną literkę

Czytaj kursy i googluj

Świetnie zdaję sobie sprawę że np na putty będzie działać i niebędzie problemu z porównywaniem ( z taka opinią spotkałem się na innym forum) ale MOWA o telnecie windowsa
OGROMNE DZIĘKI

wez moze napisz se jakis notatnik,albo gre 'kolko i krzyzyk'

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0