|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Выполнение телнет команд
Всем привет!
Пытаюсь реализовать управление удаленной машиной через telnet. Использую клиент и сервер Indy: IdTelnet и IdTelnetServer. Не могу понять, как выполнить телнет команду на сервере. На каком-то форуме писали, что надо использовать команду exec, но что-то про нее ничего не могу найти. Заодно посмотрите, все ли я делаю правильно? Сперва отправляем команду на сервер: Код:
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); begin if TClient.Connected then TClient.SendCh(Key); end; Код:
procedure TForm1.TServerExecute(AContext: TIdContext); var S: string; begin S:=Acontext.Connection.IOHandler.ReadLn(); end; |
#2
|
|||
|
|||
допустим S := 'calc.exe', то:
Код:
ShellExecute(Handle,'open',PChar(s),nil,nil,SW_SHOW); // если не путаю ничего на счет SW_SHOW взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя Последний раз редактировалось Assistant, 28.03.2011 в 20:01. |
#3
|
|||
|
|||
Так я ведь на сервере получаю телнет команды, а не имена файлов, которые необходимо открыть.
|
#4
|
|||
|
|||
так передавай например вот такова вида команды:
"exec:c:\windows\system32\calc.exe" или "sysinfo:harddisk(1)" и при получении команд распарсивай через Pos,Copy или чем тебе удобно будет (вместо : можно использовать пробел, или что душе угодно) взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#5
|
|||
|
|||
Не совсем понимаю что вы имеете в виду. Я так понимаю Exex позволяет программе работать с командной строкой? Допустим, мне нужно отключить удаленный компьютер, какое сообщение для этого надо послать?
|
#6
|
|||
|
|||
Цитата:
пусть первая часть будет в param, вторая в value, получаем: Код:
var param,value: string; begin ...... // тут распарсивание пришедшей строки S (через Pos,Copy), где S := 'exec:c:\windows\system32\calc.exe'; и разделение данных на param(первая часть, до :) и value(вторая часть, после :) ...... param := 'exec'; value := 'c:\windows\system32\calc.exe'; if param = 'exec' then WinExec(PChar(value),1); end; Код:
var param,value: string; begin ...... // тут распарсивание пришедшей строки S (через Pos,Copy), где S := 'sys:shutdown'; и разделение данных на param(первая часть, до :) и value(вторая часть, после :) ...... param := 'sys'; value := 'shutdown'; if param = 'sys' then if value = 'shutdown' then // тут процедуры завершения работы (найдете в инете) end; 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
|
|||
|
|||
А как программно заставить телнет выполнить команду?
|
#8
|
|||
|
|||
Цитата:
взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#9
|
|||
|
|||
Цитата:
|