Показать сообщение отдельно
  #3  
Старый 05.02.2016, 00:45
Trotillo Trotillo вне форума
Прохожий
 
Регистрация: 04.02.2016
Сообщения: 5
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

[quote=lmikle]Это, например:
http://leonardorame.blogspot.com/201...sh-client.html

По этому примеру подключение по SSH происходит к оборудованию, но, например, если имя администратора "admin", то на оборудование идет попытка связи с именем "a d m" и естественно не пускают. Если сделать имя администратора просто "A", то все равно не пускает, видимо и пароль подставляется с такими же ошибками, если указать пустой пароль то тоже соединения нет. Работу программы проследил, нигде не нашел, что бы какое-то действие производилось с этими данными - они несколько раз переприсваиваются другим переменным и уходят в вызываемую библиотеку.

Так же не понятно зачем этому synapse клиенту столько различных файлов.

У меня есть другой вариант на базе DelphiCryptlib и cryptlib, которые вызывают функции из файла cl32.dll, более того, все даже работает, можно подключиться к устройству, отправить команду и получить ответ. Только проблема в том, что ответ программа ждет время, указанное в константах этих модулей, и если данные задержатся, то будут обрезаны. Кроме всего иногда данные приходят с мусором, или приходят совсем другие, как будто в буфере где-то затерялись. То есть для практического применения не годится.

Код:
cryptInit;

SSH := SSH_Client('192.168.0.1', 'admin', '12345');

 if SSH = nil then
   Exit;

 Form1.Memo1.Lines.Add('Ok create SSH');
 SleepX(100);

 SSH.FlushData; // из доки понял, что обязателен вызов перед использованием PopData

 SleepX(100);

 LenData := 10000;
 BytePoped := SSH.PopData(addr(Data), LenData);
 Form1.Memo1.Lines.Add(Data);  // тут приветствие читаем
 Form1.Memo1.Lines.Add(IntToStr(BytePoped));

 Form1.Memo1.Lines.Add('------ОТПРАВЛЯЕМ КОМАНДУ--------');  
 Data := '/export compact'#13#10;
 LenData := 20;
 SSH.PushData(addr(Data), LenData, BytePushed);
 Form1.Memo1.Lines.Add(IntToStr(BytePushed));

 SleepX(1000);

 Form1.Memo1.Lines.Add('------ПОЛУЧАЕМ ОТВЕТ--------');  
 SSH.FlushData;
 Form1.Memo1.Lines.Add('------БЕРЕМ ДАННЫЕ--------');

 SleepX(500);

 LenData := 10000;
 BytePoped := SSH.PopData(addr(Data), LenData);

 Form1.Memo1.Lines.Add(Data);
 Form1.Memo1.Lines.Add(IntToStr(BytePoped));

 

 FreeAndNil(SSH);          // закругляемся
 cryptEnd;
Ответить с цитированием