![]() |
Overbyte FTPS und Datachannel
Hi,
ich versuche eine Datei mit Overbyte und FtpClient.PUT hochzuladen. Die Verbindung wird mit TLS aufgebaut. Ich kann auch Direcotrys erstellen. Aber nix hochladen. Es kommt immer 522 SSL/TLS required on the data channel. Ich habe schon ChatGPT bemüht aber da kommt nur Mist. Und bei google finde ich nicht wie ich den Daten Kanal Protecten kann. Ich hoffe jemand von euch weiß das. Vielen Dank im voraus |
AW: Overbyte FTPS und Datachannel
Hast du PBSZSize auf 0 gesetzt und PbszAsync ausgeführt sowie ProtLevel auf P gesetzt und ProtAsync ausgeführt?
Siehe Kommentar im Quelltext: Zitat:
|
AW: Overbyte FTPS und Datachannel
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:
Upload:
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;
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; |
AW: Overbyte FTPS und Datachannel
Ich habe das mal eingebaut, so wie ich das meine. Kommt eine Execption ProtAsync.
Hier mal der Quellcodeteil:
Delphi-Quellcode:
Was mach ich nun wieder falsch?!?
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); |
AW: Overbyte FTPS und Datachannel
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. |
AW: Overbyte FTPS und Datachannel
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:
Und im FtpClientRequestDone:
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;
Delphi-Quellcode:
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?
if ( RqType=ftpPbszAsync ) then begin
FtpClient.ProtLevel:='P'; FtpClient.ProtAsync; end else if ( RqType=ftpProtAsync ) then begin ReqDone:=True; end; Edit: Ich gehe über mitm und kann sehen das die eigenglich Verbindung über TLS läuft. Aber die Daten werden im Klartext gesendet. |
AW: Overbyte FTPS und Datachannel
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:
Es wird dann eine 0 Byte Datei auf dem FTP angelegt und das war es. :(
425 Unable to build data connection: Die Operation ist nicht erlaubt
|
AW: Overbyte FTPS und Datachannel
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 |
AW: Overbyte FTPS und Datachannel
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... |
AW: Overbyte FTPS und Datachannel
Hui,
danke erstmal. Ich hab ProFTP unter Debian genommen. Filezilla muss ich erst besorgen. Werde ich dir morgen bescheid sagen. Gruß und danke schonmal...:thumb: PS.: Emails scheinen immer noch nicht zu gehen, sonst hätte ich schneller geantwortet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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