Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2016, 08:19   #11
Brain_SHVV
Пользователь
 
Регистрация: 26.05.2016
Сообщений: 11
По умолчанию

Сейчас вроде все нормально, код не выдает ошибок, но и ничего не делает:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, cryptlib, DelphiCryptlib;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function SSH_Client(Server, Userid, Pass: string): TCryptSession;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.SSH_Client(Server, Userid, Pass: string): TCryptSession;
begin
 result := TCryptSession.Create(CRYPT_SESSION_SSH);
 with result do begin
   ServerName := Server;  { set hostname or IP address }
   UserName := Userid;    { set user identification }
   Password := Pass;      { set password }
 end;
 try
   result.Activate;       { establish SSH connection to server }
 except
   on E: ECryptError do
   begin
     FreeAndNil(result);
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 SSH: TCryptSession;
//  Data: PAnsiChar;
 Data: array [0..255] of AnsiChar;
 LenData: Integer;
 BytePushed: Integer;
 BytePoped: Integer;
begin
 cryptInit;
SSH := SSH_Client('ip-адрес', 'root', 'пароль');
 if SSH = nil then
   Exit;
 showmessage('зер гуд'); //это у меня логи так выводятся
 SSH.FlushData;

 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 showmessage(Data);// получаем приветствие от сервера
 showmessage(IntToStr(BytePoped));

 Data := 'free'#13; // в качестве теста, получаем информацию о использовании памяти на сервере
 LenData := 5;
 SSH.PushData(addr(Data), LenData, BytePushed);

 SSH.FlushData;

 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 showmessage(Data); //выводим то, что вернул сервер.

 FreeAndNil(SSH);          // закругляемся
 cryptEnd;
end;

end.
А здесь было так:
Код:
function UnixDateToStr(UDate: Int64): string;
begin
  DateTimeToString(result, ShortDateFormat + ' hh:nn:ss',
    UnixStartDate + UDate / SecsPerDay - UTCDiff);
end;
А сделал так и ошибка ушла:
Код:
function UnixDateToStr(UDate: Int64): string;
var ShortDateFormat: String;
begin
  DateTimeToString(result, ShortDateFormat + ' hh:nn:ss',
    UnixStartDate + UDate / SecsPerDay - UTCDiff);
end;
Но теперь когда я в коде прописываю IP-адрес сервера и пароль root, ничего не происходит и сообщений которые должны выводится не выводятся, хотя проверяю доступ к серверу через PuTTY все в норме.
Пробовал вместо команды:
Код:
Data := 'free'#13;
Код:
Data := 'ifconfig'#13;
Ничего не происходит, программа не выдает ошибок и ни каких сообщений это с учетом если запускаю с папки уже скомпилированную программу, а с Delphi ругается при нажатии на кнопку.
Brain_SHVV вне форума Ответить с цитированием
Старый 10.06.2016, 18:39   #12
kutani
Форумчанин
 
Регистрация: 23.01.2016
Сообщений: 608
По умолчанию

Откуда знаешь, что ничего не делает? Запусти сниффер, отследи исходящие запросы.
kutani вне форума Ответить с цитированием
Старый 15.04.2019, 18:21   #13
Delphin2008
 
Регистрация: 05.08.2008
Сообщений: 5
По умолчанию

Добрый день всем. Подскажите пожалуйста кто работал с crypt компонентом.
При выполнении функции
SSH := SSH_Client('192.168.1.3', 'root', 'ххх');
дает исключение cryptSetAttribute: This type of operation not available
Не пойму что ему не хватает...
У меня догадка в том что, проблема с сертификатом, вероятно его как то нужно подключать, или генерировать, но как не представлю...
Подскажите пожалуйста как это делается?

Код:

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.ScrollBox, FMX.Memo, DelphiCryptlib, cryptlib;

........................

  private
      function SSH_Client(Server, Userid, Pass: string): TCryptSession;

..............


function TForm2.SSH_Client(Server, Userid, Pass: string): TCryptSession;
begin
 result := TCryptSession.Create(CRYPT_SESSION_SSH);
 with result do begin
   ServerName := Server;  { set hostname or IP address }
   UserName := Userid;    { set user identification }
   Password := Pass;      { set password }
 end;
 try
   result.Activate;       { establish SSH connection to server }
 except
   on E: ECryptError do
   begin
     mmo1.Lines.Add(E.Message);
     FreeAndNil(result);
   end;
 end;
end;

procedure TForm2.Button1Click(Sender: TObject);
  var
 SSH: TCryptSession;
//  Data: PAnsiChar;
 Data: array [0..255] of AnsiChar;
 LenData: Integer;
 BytePushed: Integer;
 BytePoped: Integer;
begin
 mmo1.Lines.Add('--------------');  // инициализация
 cryptInit;

 SSH := SSH_Client('192.168.1.3', 'root', 'xxx'); // код выше
 if SSH = nil then
   Exit;
 mmo1.Lines.Add( 'Ok create SSH');
 Sleep(1000);

 mmo1.Lines.Add('------FlushData--------');
 SSH.FlushData; // из доки понял, что обязателен вызов перед использованием PopData

 mmo1.Lines.Add('------PopData--------');
 Sleep(1000);
 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 mmo1.Lines.Add(Data);  // тут приветствие читаем
 mmo1.Lines.Add(IntToStr(BytePoped));

 mmo1.Lines.Add('------PushData--------'); // спрашиваем дату у сервера
 Data := 'date'#13;
 LenData := 5;
 SSH.PushData(addr(Data), LenData, BytePushed);
 mmo1.Lines.Add(IntToStr(BytePushed));

 mmo1.Lines.Add('------FlushData--------');  // читаем дату у сервера
 SSH.FlushData;
 mmo1.Lines.Add('------PopData--------');
 Sleep(1000);
 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 mmo1.Lines.Add(Data);
 mmo1.Lines.Add(IntToStr(BytePoped));

 FreeAndNil(SSH);          // закругляемся
 cryptEnd;
 mmo1.Lines.Add('--------------');
end;

Последний раз редактировалось Delphin2008; 15.04.2019 в 18:41.
Delphin2008 вне форума Ответить с цитированием
Старый 15.04.2019, 18:50   #14
Delphin2008
 
Регистрация: 05.08.2008
Сообщений: 5
Вопрос

Цитата:
Сообщение от Delphin2008 Посмотреть сообщение
Добрый день всем. Подскажите пожалуйста кто работал с crypt компонентом.
При выполнении функции
SSH := SSH_Client('192.168.1.3', 'root', 'ххх');
дает исключение cryptSetAttribute: This type of operation not available
Не пойму что ему не хватает...
У меня догадка в том что, проблема с сертификатом, вероятно его как то нужно подключать, или генерировать, но как не представлю...
Подскажите пожалуйста как это делается?

Код:

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.ScrollBox, FMX.Memo, DelphiCryptlib, cryptlib;

........................

  private
      function SSH_Client(Server, Userid, Pass: string): TCryptSession;

..............


function TForm2.SSH_Client(Server, Userid, Pass: string): TCryptSession;
begin
 result := TCryptSession.Create(CRYPT_SESSION_SSH);
 with result do begin
   ServerName := Server;  { set hostname or IP address }
   UserName := Userid;    { set user identification }
   Password := Pass;      { set password }
 end;
 try
   result.Activate;       { establish SSH connection to server }
 except
   on E: ECryptError do
   begin
     mmo1.Lines.Add(E.Message);
     FreeAndNil(result);
   end;
 end;
end;

procedure TForm2.Button1Click(Sender: TObject);
  var
 SSH: TCryptSession;
//  Data: PAnsiChar;
 Data: array [0..255] of AnsiChar;
 LenData: Integer;
 BytePushed: Integer;
 BytePoped: Integer;
begin
 mmo1.Lines.Add('--------------');  // инициализация
 cryptInit;

 SSH := SSH_Client('192.168.1.3', 'root', 'xxx'); // код выше
 if SSH = nil then
   Exit;
 mmo1.Lines.Add( 'Ok create SSH');
 Sleep(1000);

 mmo1.Lines.Add('------FlushData--------');
 SSH.FlushData; // из доки понял, что обязателен вызов перед использованием PopData

 mmo1.Lines.Add('------PopData--------');
 Sleep(1000);
 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 mmo1.Lines.Add(Data);  // тут приветствие читаем
 mmo1.Lines.Add(IntToStr(BytePoped));

 mmo1.Lines.Add('------PushData--------'); // спрашиваем дату у сервера
 Data := 'date'#13;
 LenData := 5;
 SSH.PushData(addr(Data), LenData, BytePushed);
 mmo1.Lines.Add(IntToStr(BytePushed));

 mmo1.Lines.Add('------FlushData--------');  // читаем дату у сервера
 SSH.FlushData;
 mmo1.Lines.Add('------PopData--------');
 Sleep(1000);
 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 mmo1.Lines.Add(Data);
 mmo1.Lines.Add(IntToStr(BytePoped));

 FreeAndNil(SSH);          // закругляемся
 cryptEnd;
 mmo1.Lines.Add('--------------');
end;
Пробую библиотеку для отладки http://cryptlib.sogot.de/logspy.html

Создается файл (Cryptlib.log) с такими данными:

CryptlibDLL = "C:\WINDOWS\SYSTEM32\CL32.DLL"

cryptInit();
Cryptlib CL32.DLL version: 3.4.3
CryptlibDLL = "C:\WINDOWS\SYSTEM32\CL32.DLL"

cryptInit();
->function returns errorcode -12 ( = Data has already been initialised )
Cryptlib CL32.DLL version: 3.4.3
cryptCreateSession(&session, CRYPT_UNUSED, CRYPT_SESSION_SSH);
session = 159
cryptSetAttributeString(159, CRYPT_SESSINFO_SERVER_NAME, value, 11);
cryptSetAttributeString(159, CRYPT_SESSINFO_USERNAME, value, 4);
cryptSetAttributeString(159, CRYPT_SESSINFO_PASSWORD, value, 7);
cryptSetAttribute(159, CRYPT_SESSINFO_ACTIVE, 1);
->function returns errorcode -20 ( = This type of operation not available )
cryptDestroySession(159);
cryptEnd();
Delphin2008 вне форума Ответить с цитированием
Старый 24.10.2019, 20:53   #15
Timyr8
Новичок
Джуниор
 
Регистрация: 24.10.2019
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Delphin2008 Посмотреть сообщение
Пробую библиотеку для отладки http://cryptlib.sogot.de/logspy.html

Создается файл (Cryptlib.log) с такими данными:

CryptlibDLL = "C:\WINDOWS\SYSTEM32\CL32.DLL"

cryptInit();
Cryptlib CL32.DLL version: 3.4.3
CryptlibDLL = "C:\WINDOWS\SYSTEM32\CL32.DLL"

cryptInit();
->function returns errorcode -12 ( = Data has already been initialised )
Cryptlib CL32.DLL version: 3.4.3
cryptCreateSession(&session, CRYPT_UNUSED, CRYPT_SESSION_SSH);
session = 159
cryptSetAttributeString(159, CRYPT_SESSINFO_SERVER_NAME, value, 11);
cryptSetAttributeString(159, CRYPT_SESSINFO_USERNAME, value, 4);
cryptSetAttributeString(159, CRYPT_SESSINFO_PASSWORD, value, 7);
cryptSetAttribute(159, CRYPT_SESSINFO_ACTIVE, 1);
->function returns errorcode -20 ( = This type of operation not available )
cryptDestroySession(159);
cryptEnd();
Выдает абсолютно такой же лог. При этом в логах сервера видно, что компьютер подключается и сразу сбрасывает соединение без попыток ввести логин. Как нибудь решили эту проблему?
Timyr8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Девушки хотят управлять своими парнями мужьями, потому что управлять больше некем Alar Свободное общение 73 22.06.2016 16:29
Как из Delphi управлять мобильником через USB. AT функции. vovken1997 Общие вопросы Delphi 78 31.03.2012 13:16
не получается управлять telnet-ом с delphi criator Помощь студентам 2 01.04.2011 15:16
Знание протокола TCP под Linux, передача данных между клиентом и FTP сервером komis Помощь студентам 0 19.04.2010 17:20
Как управлять в Delphi диспетчером процессов? docbrain Общие вопросы Delphi 6 10.02.2010 08:00