sgcIndy 功能

增强型 Indy TCP/IP 组件,支持 OpenSSL 1.1/3.0、XOAuth2 身份验证,以及为 Delphi 和 Free Pascal 改进的网络功能。

现代 OpenSSL 支持

使用最新的 OpenSSL 库和 TLS 标准,让您的 Indy 应用程序与时俱进。

OpenSSL 1.1

全面支持 OpenSSL 1.1.x,具备 TLS 1.2 和 TLS 1.3 功能。可直接替换旧版 Indy OpenSSL 集成。

OpenSSL 3.0

支持最新的 OpenSSL 3.x 系列,采用全新提供程序架构,符合 FIPS 规范,并改进了密码套件管理。

TLS 1.3

一流的 TLS 1.3 支持,包含 0-RTT 恢复、改进的握手性能和现代密码套件。

XOAuth2 和增强型 TCP/IP

XOAuth2 身份验证

内置针对 Gmail、Outlook 及其他 OAuth 2.0 提供商的 XOAuth2 支持。通过现代 OAuth 流程对 SMTP、IMAP 和 POP3 连接进行身份验证。

增强型 TCP/IP

相比标准 Indy 组件,改进了连接处理、保活管理、超时控制和缓冲区管理。

免费开放

sgcIndy 免费使用。兼容 Delphi 7 至 RAD Studio 13 以及 Free Pascal/Lazarus。无许可费用或版税。

SSH 客户端 — TIdSSHClient

功能完整的 SSH 2.0 客户端,用于安全的远程连接。通过加密通道执行命令、打开交互式 Shell 并设置端口转发。

安全远程执行

TIdSSHClient 处理完整的 SSH 生命周期:版本交换、密钥协商、用户身份验证和通道管理。通过简洁的 Delphi 组件 API 连接到任何 SSH 服务器,运行命令、打开 Shell 或转发端口。

  • 密码、公钥和键盘交互式身份验证
  • Execute() — 通过一次调用执行远程命令并获取输出
  • RequestShell / RequestPTY — 打开交互式终端会话
  • 端口转发 — 通过 OpenDirectTCPIP 和 RequestForwarding 进行本地和远程 TCP/IP 隧道传输
  • 多通道 — 通过单个连接打开多个并发会话
SSH_Example.pas
var
  SSH: TIdSSHClient;
  Output: string;
begin
  SSH := TIdSSHClient.Create(nil);
  try
    SSH.Host := 'server.example.com';
    SSH.Port := 22;
    SSH.Authentication.Username := 'admin';
    SSH.Authentication.Password := 'secret';
    SSH.Connect;

    // Execute a command and get output
    Output := SSH.Execute('ls -la /var/log');
    Memo1.Text := Output;

    SSH.Disconnect;
  finally
    SSH.Free;
  end;
end;

身份验证

支持密码、公钥(RSA、ECDSA、ED25519)和键盘交互式方法。从 PEM 文件加载私钥,可选设置密码短语。通过 OnSSHHostKey 事件进行主机密钥验证。

现代密码学

Curve25519、ECDH 和 Diffie-Hellman 密钥交换。AES-CTR 和 AES-GCM 密码。HMAC-SHA2 消息身份验证。通过 Algorithms 属性配置算法偏好。

通道与子系统

通过 OpenChannel 在单个连接上打开多个通道。为每个通道请求 exec、shell 或子系统(如 SFTP)。独立地为每个通道发送数据、信号和 EOF。

保活与超时

可配置的保活间隔和最大计数,用于检测失效连接。通过 SSHOptions 设置连接和读取超时。通过 Rekey() 支持自动重新密钥协商。

端口转发

通过 OpenDirectTCPIP 实现本地到远程的隧道传输。通过 RequestForwarding 和 CancelForwarding 实现远程到本地的转发。通过加密 SSH 连接隧道传输任何 TCP 流量。

丰富的事件

OnSSHChannelData 用于接收数据,OnSSHChannelExitStatus 用于命令结果,OnSSHAuthBanner 用于服务器横幅,OnSSHError 用于错误处理。完整的事件驱动架构。

SFTP 客户端 — TIdSFTPClient

基于 SSH 的安全文件传输。通过进度跟踪和完整属性支持,上传、下载和管理远程文件及目录。

安全文件操作

TIdSFTPClient 基于 TIdSSHClient 构建,自动处理 SFTP 子系统。它为所有常见文件操作提供高级 API,无需手动管理 SSH 通道或 SFTP 协议。

  • Get / Put — 通过路径或流下载和上传文件
  • ListDirectory — 列出带有文件属性的远程目录内容
  • Delete / Rename — 管理远程文件和目录
  • MakeDirectory / RemoveDirectory — 创建和删除文件夹
  • OnSFTPProgress — 跟踪传输进度,包含已传输字节数、总大小和取消支持
SFTP_Example.pas
var
  SFTP: TIdSFTPClient;
  Items: TIdSFTPDirectoryItems;
  i: Integer;
begin
  SFTP := TIdSFTPClient.Create(nil);
  try
    SFTP.Host := 'sftp.example.com';
    SFTP.Authentication.Username := 'admin';
    SFTP.Authentication.PrivateKeyFile :=
      'C:\Keys\id_rsa';
    SFTP.Connect;

    // Upload a file
    SFTP.Put('C:\local\report.pdf',
      '/remote/reports/report.pdf');

    // List directory
    Items := SFTP.ListDirectory('/remote/reports');
    for i := 0 to Items.Count - 1 do
      Memo1.Lines.Add(Items[i].FileName);

    // Download a file
    SFTP.Get('/remote/data.csv',
      'C:\local\data.csv');

    SFTP.Disconnect;
  finally
    SFTP.Free;
  end;
end;

文件传输

Get() 将远程文件下载到本地路径或 TStream。Put() 从本地路径或 TStream 上传。通过 SFTPBufferSize 配置缓冲区大小以获得最佳吞吐量。传输过程中 OnSFTPProgress 触发,包含已传输字节数、总大小和 Cancel 标志。

目录操作

ListDirectory() 返回 TIdSFTPDirectoryItems,包含每个条目的文件名、大小、权限、时间戳和类型。MakeDirectory() 和 RemoveDirectory() 用于文件夹管理。GetCurrentDirectory() 返回远程工作路径。

文件属性

Stat() 和 LStat() 获取大小、权限、UID/GID 和时间戳。SetStat() 修改远程属性。FileExists()、DirectoryExists() 和 FileSize() 用于快速检查。通过 Symlink() 和 ReadLink() 支持符号链接。

字符串辅助方法

GetFileAsString() 将远程文件直接读入 Delphi 字符串。PutFileFromString() 将字符串写入远程文件。RealPath() 将相对路径或符号路径解析为服务器上的绝对位置。

SSH 身份验证

继承 TIdSSHClient 的所有 SSH 身份验证:密码、公钥(RSA、ECDSA、ED25519)和键盘交互式。通过 Authentication 属性设置凭据。OnSSHHostKey 事件用于服务器验证。

事件与进度

OnSFTPProgress 跟踪已传输字节数和总大小,带有 Cancel 标志可中止传输。OnSFTPError 提供错误代码和消息。OnSFTPStatus 用于状态更新。OnSFTPDirectoryList 在目录列表完成时触发。

升级您的 Indy 组件

免费下载 sgcIndy,为您的应用程序带来现代 TLS 支持。