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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.03.2013, 14:54
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию ввод/вывод командной строки в мемо

Всем привет!

Имеется программа для формирования команд для телнет. Сейчас она работает так: выбираешь сервер телнет, вводишь данные, программа формирует команды типа:

telnet server
login
pass
comand
comand
comand
comand
...

, все это копируется и вставляется в командную строку и все там выполняется. Хотелось бы сделать чтобы он все это выполнял также в командной строке но отображал в мемо.
Так как начинающий програмер, смотрел примеры по работе с командной строкой, но так ничего и не понял или даже еще больше запутался. Смотрел в сторону idTelnet и Winexec. Но пока не осилил. И еще одна просьба, если можно не только пример программы но и объяснения к скрипту. хотелось бы понять для дальнейшей работы с программой.

Заранее благодарен!
Ответить с цитированием
  #2  
Старый 31.03.2013, 20:40
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Если я правильно понял, то есть некий эмулятор телнета который генерит сей скрипт. Вы затем засовываете это в реальный телнет?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 01.04.2013, 15:33
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Не совсем. На данный момент просто команды выводятся в мемо. Я их копирую и вставляю в cmd.exe ну и там все это выполняется(простейши копи-паст). Ну т.е. это просто облегчает тем что не надо команды вспоминать и вводить. А хочется еще доработать программу и сделать чтобы она сама подключалась по телнету и вводила команды по заранее заданным данным.
Ответить с цитированием
  #4  
Старый 01.04.2013, 15:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

есть готовое решение:

Цитата:
TSE - Telnet Script Executor. Программа - исполнитель telnet сценариев предназначена для автоматизации рутинных процедур по обслуживанию оборудования и программного обеспечения, сбора статистической информации и прочих работ которые могут делаться при помощи программы/протокола telnet. При необходимости программу TSE можно использовать и для доступа к другим сервисам рассчитанным на символьный обмен. Программа является бесплатной (freeware) и поставляется с исходными текстами (на C++). Программа тестировалась в работе под ОС MS Windows 95, 98, NT 4.0. Последнюю версию программы можно скачать по адресу http://home.onego.ru/~loft/_tse.exe С автором программы можно связаться по E-mail: Loft@onego.ru
Программа TSE принимает со стандартного устройства ввода (по умолчанию это консоль)команды, интерпретирует и выполняет их. Список команд и их действия приведен ниже. При своей работе программа выводит на стандартное устройство вывода (по умолчанию это консоль) символы отосланные и полученные от устройства (ПК) к которому она в данный момент подключена по протоколу TCP/IP. При необходимости может быть включена расширенная диагностика или наоборот полностью отключен вывод сообщений.
Программа TSE может принимать следующие параметры командной строки:
tse.exe [options] [parameters] [<scriptfile] [>outputfile]
[options] в качестве префикса может быть использован символ - или /:
-s: молчаливый режим (отключен вывод сообщений)
-d: показывать сообщения расширенной диагностики
-h: показать экран подсказки по использованию программы
[parameters] список параметров командной строки (до 9-ти параметров) которые могут быть использованы в файле сценария. Если параметр начинается с символа - или / то для отличия его от опции необходимо продублировать первый символ: -- или //
[scriptfile] имя файла со сценарием, если отсутствует программа будет ждать ввода команд с консоли
[outputfile] имя файла для вывода информации, если отсутствует программа будет выводить информацию на консоль

Программа TSE читает и выполняет команды построчно. Строки могут заканчиваться как символами с кодом 0D и 0A, так и только одним символом 0A. Сценарий прекращает выполняться в случае если программа дойдет до конца файла (получит символ Ctrl+Z в случае ввода с консоли), будет выполнена команда на прекращение работы или в случае любой ошибки в синтаксисе команд сценария или ошибки выполнения этих команд. Строки начинающиеся с символа ; считаются комментариями. Комбинация с %1 до %9 считается ссылкой на соответствующий параметр командной строки. Если необходимо использовать символ % в тексте для других целей достаточно его продублировать - %%.
Поддерживаются следующие команды:
- rem - строка является комментарием. Пример: rem Connect to router
- open - подключиться к удаленному устройству/ПК. Команда имеет 2 параметра: open <IP-адрес> [TCP-порт]. В качестве адреса может выступать как имя так и непосредственно IP-адрес. TCP-порт числовой номер порта, если отсутствует, то подключение будет произведено к 23-му порту. Пример: open 192.168.0.1
- close - закрывает текущее соединение. Команда не имеет параметров;
- exit - закрывает текущее соединение и прекращает выполнение сценария. Команда не имеет параметров;
- quit - прекращает выполнение сценария, при этом не ожидается закрытия соединения с удаленным устройством. Данную команду полезно использовать при перезагрузке устройства/ПК, когда TCP-сессия все равно уже не может быть корректно закрыта. Команда не имеет параметров;
- waitfor - ожидает получения от подключенного устройства определенных данных. Команда имеет один параметр - символьную строку в "" которую необходимо ожидать. Пример: waitfor "name:"
- transmit - посылает на подключенное устройство данные. Команда имеет один параметр - символьную строку в "" которую необходимо отослать. Пример: transmit "root^M"
- pause - пауза в работе программы на заданное количество секунд. Может быть полезна для ожидания от удаленного устройства обработки посланных данных, например перед закрытием соединения. Команда имеет один параметр - число секунд, которые необходимо ждать. Пример: pause 3
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 02.04.2013, 10:01
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Подскажите, как можно этим воспользоваться? Я видимо чего-то не понимаю.
Ответить с цитированием
  #6  
Старый 03.04.2013, 18:15
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Люди может хотя бы подскажите как открыть цмд.ехе (хотя знаю как его открыть из программы) и вставить туда все команды которые он формирует?
Ответить с цитированием
  #7  
Старый 13.05.2013, 15:59
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Люди не сочтите за наглость, но могли бы помочь с другой программой для бэкапов настроек целогоо списка оборудования. Как я вижу данную прогу:

на форме только мемо и

procedure TForm1.FormCreate(Sender: TObject);
begin
//idtelnet1.Terminal:='VT100';
host:='huawei-941';
ip:='100.244.003.002';
cmd:='q' + #13 + 'en' + #13 + 'backup configuration ftp 10.244.57.205 ' + host + '-' + datetimetostr(date);
IdTelnet1.Host:=ip;
IdTelnet1.Connect;
snd('rroot');
snd('rootpass');
snd(cmd);
snd('y');
snd(logout);
end;

Но вот ньюанс, не знаю как реализовать чтобы он выполнил эту команду на целом списке оборудовании и выдерживал паузу после команды snd(cmd). Я тут подумал нельзя ли сделать процедуру внутри процедуры, т.е. одна будет перечислять ип адреса оборудования, а вторая, в которой будет первая процедура, будет уже выполнять вышеуказанную процедуру. Ну или как то так чот я уже сам запутался))).
Ответить с цитированием
  #8  
Старый 15.05.2013, 20:22
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Кстати, почему то когда отправляет рута съедает первую букву поэтому сделал два раза р (rroot)
Ответить с цитированием
  #9  
Старый 15.05.2013, 19:23
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

ЙОООЛКИ... Форум нуджается в теге "spoiler", такие портянки эпичные напостили.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #10  
Старый 31.05.2013, 10:40
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

гуру подскажите что я делаю не так?

вот так на данный момент выглядит прога для бекапов:

Код:
procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet;
  const Buffer: String);
const
  CR=#13;
  LF=#10;
var
  Start, Stop: integer;
  begin
    memo1.Lines.Add('');
    start:=1;
    stop:=Pos(CR, Buffer);
    if stop = 0 then
      stop:=length(buffer)+1;
    while start<=length(buffer) do
      begin
        memo1.Lines.Strings[memo1.Lines.Count - 1]:=
        memo1.Lines.Strings[memo1.Lines.count - 1] +
        copy(buffer, start, stop - start);
        if buffer[stop] = CR then begin
            memo1.Lines.Add('');
        end;
        start:=stop+1;
        if start > length(buffer) then break;
        if buffer[start] = LF then start:=start+1;
        stop:=start;
        while (buffer[stop] <> CR) and (stop <=length(buffer)) do
        stop:=stop+1;
      end;
end;

procedure TForm1.snd(ds: string);
begin
  for i:=1 to length(ds) do idtelnet1.SendCh(ds[i]);
  idtelnet1.SendCh(#13);
end;

procedure TForm1.tlnt(ipadr: string; hostname: string);
begin
 usr:='rroot';
 pass:='rootpass';
 lgt:='logout';
 cmd:='enable' + #13 + 'backup configuration ftp 10.244.7.205 ' + hostname + '-' + datetimetostr(date);
 IdTelnet1.Host:=ipadr;
 IdTelnet1.Connect;
 snd(usr);
 snd(pass);
 snd('q');
 snd(cmd);
 snd('y');
// Sleep(60000);
 snd(lgt);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 for i:=1 to 2 do begin
 if i=1 then  tlnt('10.24.5.14', 'huawei-1');
 if i=2 then  tlnt('10.24.5.178', 'huawei-2');
 end;
end;
end.

Подключается через раз, если подключается то не отправляет usr и pass. Если делать на одной железке то через раз проходит если проходит через раз отправляет usr и pass. Так вот не понятно в чем проблема. Очень надо.
Ответить с цитированием
  #11  
Старый 03.06.2013, 08:27
darchken darchken вне форума
Прохожий
 
Регистрация: 31.03.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

люди ну хоть что то подскажите!!! уже пробывал в трай, финалли засунуть все равно прога намертво виснет. подключается но не отправляет команды.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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