Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.03.2011, 18:30
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию Выполнение телнет команд

Всем привет!
Пытаюсь реализовать управление удаленной машиной через telnet. Использую клиент и сервер Indy: IdTelnet и IdTelnetServer. Не могу понять, как выполнить телнет команду на сервере. На каком-то форуме писали, что надо использовать команду exec, но что-то про нее ничего не могу найти.
Заодно посмотрите, все ли я делаю правильно?
Сперва отправляем команду на сервер:
Код:
1
2
3
4
5
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if TClient.Connected then
  TClient.SendCh(Key);
end;
Далее, принимаем ее на сервере:
Код:
1
2
3
4
5
procedure TForm1.TServerExecute(AContext: TIdContext);
var S: string;
begin
S:=Acontext.Connection.IOHandler.ReadLn();
end;
А что дальше?
Ответить с цитированием
  #2  
Старый 28.03.2011, 19:03
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

допустим S := 'calc.exe', то:
Код:
1
ShellExecute(Handle,<font color="Navy">'open'</font>,PChar(s),<b>nil</b>,<b>nil</b>,SW_SHOW); <font color="Navy"><i>// если не путаю ничего на счет SW_SHOW</i></font>
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя

Последний раз редактировалось Assistant, 28.03.2011 в 20:01.
Ответить с цитированием
  #3  
Старый 28.03.2011, 19:09
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

Так я ведь на сервере получаю телнет команды, а не имена файлов, которые необходимо открыть.
Ответить с цитированием
  #4  
Старый 28.03.2011, 19:21
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

так передавай например вот такова вида команды:
"exec:c:\windows\system32\calc.exe" или "sysinfo:harddisk(1)"
и при получении команд распарсивай через Pos,Copy или чем тебе удобно будет (вместо : можно использовать пробел, или что душе угодно)
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #5  
Старый 28.03.2011, 19:40
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

Не совсем понимаю что вы имеете в виду. Я так понимаю Exex позволяет программе работать с командной строкой? Допустим, мне нужно отключить удаленный компьютер, какое сообщение для этого надо послать?
Ответить с цитированием
  #6  
Старый 28.03.2011, 19:49
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от km_
Не совсем понимаю что вы имеете в виду. Я так понимаю Exex позволяет программе работать с командной строкой? Допустим, мне нужно отключить удаленный компьютер, какое сообщение для этого надо послать?
та я же образно говорил, вы посылаете на сервер "exec:c:\windows\system32\calc.exe", там разделяете это сообщение на 2 части: команда:параметра и проверяете:
пусть первая часть будет в param, вторая в value, получаем:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
<b>var
</b>  param,value: <b>string</b>;
<b>begin
</b>  ......
  <font color="Navy"><i>// тут распарсивание пришедшей строки S (через Pos,Copy), где S := 'exec:c:\windows\system32\calc.exe';
  и разделение данных на param(первая часть, до :) и value(вторая часть, после :)</i></font>
  ......
  param := <font color="Navy">'exec'</font>;
  value := <font color="Navy">'c:\windows\system32\calc.exe';</font>
  <b>if </b>param = <font color="Navy">'exec'</font> <b>then
</b>    WinExec(PChar(value),1);
<b>end</b>;
для выключение компьютера так же:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
<b>var
</b>  param,value: <b>string</b>;
<b>begin
</b>  ......
  <font color="Navy"><i>// тут распарсивание пришедшей строки S (через Pos,Copy), где S := 'sys:shutdown';
  и разделение данных на param(первая часть, до :) и value(вторая часть, после :)</i></font>
  ......
  param := <font color="Navy">'sys'</font>;
  value := <font color="Navy">'shutdown';</font>
  <b>if </b>param = <font color="Navy">'sys'</font> <b>then
</b>    <b>if </b>value = <font color="Navy">'shutdown'</font> <b>then
</b>      <font color="Navy"><i>// тут процедуры завершения работы (найдете в инете)</i></font>
<b>end</b>;

P.S.: желательно это всё делать через CASE, а не через IF, что бы не плодить over 9000 IF'ов, если параметров будет много или команд.
P.S.2: лично моё мнение - лучше делать через TClientSocket и TServerSocket.
P.S.3: можно конечно написать аналог сервера telnet'а как в Linux или Windows XP/Server (в XP начиная по-моему с SP1 отключен по умолчанию как служба), но это уже сложнее.
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя

Последний раз редактировалось Assistant, 28.03.2011 в 20:04.
Ответить с цитированием
  #7  
Старый 28.03.2011, 20:04
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

А как программно заставить телнет выполнить команду?
Ответить с цитированием
  #8  
Старый 28.03.2011, 20:06
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от km_
А как программно заставить телнет выполнить команду?
а я щас вот это всё к чему писал?
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #9  
Старый 28.03.2011, 20:07
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

Цитата:
Сообщение от Assistant
а я щас вот это всё к чему писал?
Большое спасибо, понял!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025