AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Overbyte FTPS und Datachannel
Thema durchsuchen
Ansicht
Themen-Optionen

Overbyte FTPS und Datachannel

Ein Thema von DelTurbo · begonnen am 10. Mär 2025 · letzter Beitrag vom 25. Mär 2025
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#1

AW: Overbyte FTPS und Datachannel

  Alt 11. Mär 2025, 09:07
Hi, erstmal danke für die Antwort. Wenn ich ehrlich bin habe ich diesen Text nicht verstanden.

Ich möchte mal meinen Quelltext zeigen. Vielleicht kann dann jemand sagen (oder du) wo das rein muss.

Erzeugen des FTPClient:
Delphi-Quellcode:
function CreateFTPClient(Host,Port,User,Pass:String):Boolean;
begin
    Result:=True;
    try
      FTPClient:=TSslFtpClient.Create(nil);
      FtpClient.HostName :=Host;
      FTPClient.Port:=Port;
      FtpClient.UserName:=User;
      FtpClient.PassWord:=Pass;
      FtpClient.SslType:=sslTypeAuthTls;
      FtpClient.SslContext:=TSslContext.Create(nil);
      FtpClient.SslContext.SslVerifyPeer := False; // Kein Zertifikatscheck
      FTPClient.Passive:=True;
      FTPClient.Connect;
    except
      Result:=False;
    end;
end;
Upload:
Delphi-Quellcode:
function FTPUpload(FName:String):Boolean;
begin
    Result:=True;
    FTPClient.Binary:=True;
    FTPClient.LocalFileName:=FName;
    FTPClient.HostFileName:=FTPFName;
    if ( not FTPClient.Put ) then begin
      WriteLn(FTPClient.LastResponse);
    end;
end;
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#2

AW: Overbyte FTPS und Datachannel

  Alt 12. Mär 2025, 09:01
Ich habe das mal eingebaut, so wie ich das meine. Kommt eine Execption ProtAsync.

Hier mal der Quellcodeteil:

Delphi-Quellcode:
      FtpClient.Connect;
      FtpClient.PBSZSize:=0;
      FtpClient.PbszAsync;
      Writeln(FtpClient.LastResponse);
      Sleep(1000);
      FtpClient.ProtLevel:='P';
      FtpClient.ProtAsync; //<-- Hier kommt 'FTP component not ready, state Waiting Response'
      Writeln(FtpClient.LastResponse);
Was mach ich nun wieder falsch?!?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#3

AW: Overbyte FTPS und Datachannel

  Alt 12. Mär 2025, 09:34
Async heißt async. ICS ist eventbasiert. Du musst auf die Antwort reagieren (nicht warten) statt direkt den Wert in LastResponse anzuzeigen und 1 Sekunde fest zu warten, während du den Thread blockierst.

Stattdessen musst du auf OnRequestDone reagieren. Dort bekommst du den ausgeführten Befehl übergeben und kannst bei RqType = ftpPbsz den Prot Befehl ausführen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#4

AW: Overbyte FTPS und Datachannel

  Alt 12. Mär 2025, 10:53
Hi,
erstmal danke für deine Hilfe. Ich habe das nun wie folgt eingebaut, aber im FTPLog steht immer noch: 2025-03-12 11:41:55,676 mod_tls/2.9.2[4886]: unable to open data connection: TLS negotiation failed

Ich habe das wie folgt eingebunden:
Delphi-Quellcode:
      FtpClient.HostName := 'pc238.lan'; // FTP-Server-Adresse
      FtpClient.UserName := 'ftpusr'; // FTP-Benutzername
      FtpClient.PassWord := '123456'; // FTP-Passwort
      FtpClient.SslType:= sslTypeAuthTls;
      FtpClient.SslContext:= TSslContext.Create(nil);
      FtpClient.SslContext.SslVerifyPeer := False; // Kein Zertifikatscheck
      FTPClient.Passive:=True;
      writeln('Verbinde mit FTP-Server...');
      FtpClient.Connect;
      writeln('Verbunden!');

      ReqDone:=False;
      FtpClient.PBSZSize:=0;
      FtpClient.PbszAsync;

      while ( not ReqDone ) do begin
        Application.ProcessMessages;
        Sleep(100);
      end;
Und im FtpClientRequestDone:
Delphi-Quellcode:
    if ( RqType=ftpPbszAsync ) then begin
      FtpClient.ProtLevel:='P';
      FtpClient.ProtAsync;
    end else
    if ( RqType=ftpProtAsync ) then begin
      ReqDone:=True;
    end;
Damit müsste ja sicher gestellt sein das die 2 sachen durch sind. Naja und beim FtpClient.Put kommt immer noch 425 (siehe FTPLog). Ist Falsch was ich gemacht habe? Oder fehlt noch etwas?

Edit: Ich gehe über mitm und kann sehen das die eigenglich Verbindung über TLS läuft. Aber die Daten werden im Klartext gesendet.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo (12. Mär 2025 um 11:18 Uhr)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#5

AW: Overbyte FTPS und Datachannel

  Alt 16. Mär 2025, 08:52
Hallo,
ich mache es sehr ungern. Aber ich möchte doch nochmal nach fragen ob wirklich keiner eine Idee hat, was ich Falsch mache? Ich bekomme den Datenkanal nicht dicht. Bei Indy weiß ich das man nur ein Flag setzen muss.

Aber weder bei ICS noch Synapse bekomme ich das hin. Es kommt beim versuch eine uploads immer:
Code:
425 Unable to build data connection: Die Operation ist nicht erlaubt
Es wird dann eine 0 Byte Datei auf dem FTP angelegt und das war es.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#6

AW: Overbyte FTPS und Datachannel

  Alt 16. Mär 2025, 10:42
Hier noch ein Log mit ICSLogger gemacht.

Code:
11:27:21:556 ! HighLevelAsync 0
11:27:21:601 Control DNS Lookup Done - 192.168.0.238
11:27:21:615 Control Socket Connect, error=0 to 192.168.0.238:ftp
11:27:21:668 >|220 ProFTPD Server (Debian) [192.168.0.238]|

11:27:21:668 ! HighLevelAsync 0
11:27:21:668 Start command, Req=AuthAsync - AUTH TLS
11:27:21:670 >|234 AUTH TLS successful|

11:27:21:702 ! HighLevelAsync 0
11:27:21:702 Start command, Req=UserAsync - USER ftpusr
11:27:21:703 >|331 Password required for ftpusr|

11:27:21:704 ! HighLevelAsync 0
11:27:21:704 Start command, Req=PassAsync - PASS 123456
11:27:21:776 >|230 User ftpusr logged in|

11:27:21:776 ! HighLevelAsync 0
11:27:21:776 ! HighLevelAsync done
11:27:26:432 Start command, Req=PbszAsync - PBSZ 0
11:27:26:577 >|200 PBSZ 0 successful|

11:27:26:579 Start command, Req=ProtAsync - PROT P
11:27:26:701 >|200 Protection set to Private|

11:27:26:702 Start command, Req=TypeSetAsync - TYPE I
11:27:26:860 >|200 Type set to I|

11:27:27:022 ! HighLevelAsync 0
11:27:27:022 Start command, Req=PortAsync - PASV
11:27:27:023 >|227 Entering Passive Mode (192,168,0,238,179,33).|

11:27:27:023 ! HighLevelAsync 0
11:27:27:023 Start command, Req=Put/Append - libssl-1_1.zip
11:27:27:025 ! Data Session opened (Put)
11:27:27:027 >|150 Opening BINARY mode data connection for file.zip|

11:27:27:028 ! Send first block
11:27:27:028 DataSocketPutDataSent 65536
11:27:27:032 ! Data Session closed
11:27:27:032 ! Next3PutAsync
11:27:27:033 >|425 Unable to build data connection: Die Operation ist nicht erlaubt|

11:27:27:034 Start command, Req=QuitAsync - QUIT
11:27:27:036 >|221 Goodbye.|

11:27:27:038 Control Socket Closed, error=0
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#7

AW: Overbyte FTPS und Datachannel

  Alt 16. Mär 2025, 11:09
Kannst du das Log nicht mal mit Filezilla oder so vergleichen? Das gibt die Befehle ja auch aus.

Ich muss mal schauen, dass ich einen FTPS Server zum Testen aufsetze. Das sollte ja schnell gehen...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz