Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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, 19:39   #12
kutani
Участник клуба
 
Регистрация: 23.01.2016
Сообщений: 610
Репутация: 335
По умолчанию

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

Добрый день всем. Подскажите пожалуйста кто работал с 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 в 19:41.
Delphin2008 вне форума   Ответить с цитированием
Старый 15.04.2019, 19:50   #14
Delphin2008
 
Регистрация: 05.08.2008
Сообщений: 5
Репутация: 10
Вопрос

Цитата:
Сообщение от 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 вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Девушки хотят управлять своими парнями мужьями, потому что управлять больше некем Alar Свободное общение 73 22.06.2016 17: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 09:00


16:49.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru