Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout (https://www.delphipraxis.net/118066-idftp-list-bei-glftpd-ftpserver-ssl-read-timeout.html)

gandime 30. Jul 2008 23:28


idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Hi,
ein freund von mir hat einen glftpd Ftp-Server +ssl. Das connecten läuft super kann auch was runterladen usw aber ich kann die ordner einfach nicht auflisten lassen!
Ich habe folgenden code:
Delphi-Quellcode:
procedure TForm1.SSLconnect;
//var
//  FIdFTPClient: TIdFTP;
//  FIdSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  try
    FIdFTPClient.Host:=ed_ip.text;
    FIdFTPClient.Port:=strtointdef(ed_port.text,21);
    FIdFTPClient.Username:=ed_user.text;
    FIdFTPClient.Password:=ed_pw.text;
    if cb_ssl.Checked then
    begin
      FIdFTPClient.IOHandler:=FIdSSLHandler;
      FIdSSLHandler.SSLOptions.CertFile:='Z:\Delphi\ftp ssl\ssl.cer';
      FIdSSLHandler.SSLOptions.Method:=sslvSSLv23;
      FIdSSLHandler.SSLOptions.Mode:=sslmClient;
      FIdSSLHandler.SSLOptions.VerifyMode := [sslvrfPeer];
      FIdSSLHandler.PassThrough := False;
      FIdSSLHandler.OnVerifyPeer := MeinSSLZertifikatChecker;
      FIdSSLHandler.Destination:=FIdFTPClient.Host;
      FIdSSLHandler.host:=FIdFTPClient.Host;
      FIdFTPClient.IOHandler := FIdSSLHandler;
      FIdFTPClient.UseTLS := utUseExplicitTLS;
      FIdFTPClient.AUTHCmd := tAuto;
      FIdFTPClient.DataPortProtection:=ftpdpsPrivate;
      FIdFTPClient.UseTLS:=utUseImplicitTLS;
      FIDFTPClient.ReadTimeout:=15000;
      FIDFTPClient.Passive:=true;
      FIdFTPClient.DataPortProtection:=ftpdpsPrivate;
      FIdFTPClient.UseTLS:=utUseExplicitTLS;
    end
    else
    begin
      FIdFTPClient.UseTLS := utNoTLSSupport;
      FIdFTPClient.DataPortProtection := ftpdpsClear;
    end;
    FIdFTPClient.Connect;
  finally
  end;
end;

procedure TForm1.list;
begin
  FTP.List(slList,'',false);// Hier is der Fehler
//usw.
end;
Fehler:
Zitat:

Erste Gelegenheit für Exception bei $76CBF35F. Exception-Klasse EIdReadTimeout mit Meldung 'Read Timeout'. Prozess Project1.exe (3748)
was mache ich falsch?


mfg

gandime

marabu 31. Jul 2008 06:12

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Moin,

ist denn sichergestellt, dass es sich bei FTP und FIdFTPClient um dieselbe Komponente handelt?

Grüße vom marabu

gandime 31. Jul 2008 06:30

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
ja sry ich hab was vergessen zu übertragen... hier nochmal richtig:
Delphi-Quellcode:
procedure TForm1.list(FTP:TidFTP);
begin
  FTP.List(slList,'',false);// Hier is der Fehler
//usw.
end;
und ich rufe es so auf:
Delphi-Quellcode:
List(FIdFTPClient);

Assertor 31. Jul 2008 09:47

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Hi gandime,

probier mal bitte das ReadTimeout des IOHandlers auch zu setzen. Welche Indy-Version verwendest Du und was sagt das Log des Servers?

Du könntest auch testhalber mal die Methoden OnStatus und OnStatusInfo des SSLIOHandlers implementieren. Da bekommst Du auch ein paar Debugmeldungen.

Gruß Assertor

gandime 31. Jul 2008 15:56

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Es ist mal wieder etwas unglaubliches passiert was ich nicht verstehe!

Erstmal die infos nach dem Connecten:
idFTP:
Zitat:

Connected.
Connection established
SSLIOHandler Status:
Zitat:

Connecting to 80.154.*.*.
SSLIOHandler Statusinfo:
Zitat:

SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv2/v3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server key exchange A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = EDH-DSS-DES-CBC3-SHA; description = EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
; bits = 168; version = TLSv1/SSLv3;
Nach dem auflisten:
IdFTP:
Zitat:

Starting FTP transfer
Transfer complete
SSLIOHandler Status:
Zitat:

drwxrwxrwx 5 glftpd glftpd 42 Jul 30 11:14 archive
drwxrwxrwx 5 glftpd glftpd 42 Jul 30 11:17 new
SSLIOHandler Statusinfo:
Zitat:

SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv2/v3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server key exchange A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = DHE-DSS-RC4-SHA; description = DHE-DSS-RC4-SHA SSLv3 Kx=DH Au=DSS Enc=RC4(128) Mac=SHA1
; bits = 128; version = TLSv1/SSLv3;
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Und das erstaunliche/wunderliche ist das geht alles nur sofern ich die OnStatusInfo des SSLIOHandlers implementiert habe und den erhaltenen String Msg auslese!
Außerdem sobald ich ein paar Minuten auf dem FTP-Server Connected bin und nichts mache und danach wieder die Ordner auslesen möchte bekomme ich folgenden Fehler:
Zitat:

Erste Gelegenheit für Exception bei $779DF35F. Exception-Klasse EAccessViolation mit Meldung 'Access violation at address 00488863 in module 'Project1.exe'. Read of address 00000014'. Prozess Project1.exe (3520)

Assertor 31. Jul 2008 16:22

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Hi gandime,

Zitat:

Zitat von gandime
Erste Gelegenheit für Exception bei $779DF35F. Exception-Klasse EAccessViolation mit Meldung 'Access violation at address 00488863 in module 'Project1.exe'. Read of address 00000014'. Prozess Project1.exe (3520)

Bitte poste Deine Indy Version, welche DLLs Du für OpenSSL verwendest und zusätzlich etwas mehr Code (insbesondere Objekt Erzeugung und Freigabe).

Gruß Assertor

gandime 31. Jul 2008 17:38

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Die einzige genauere Version von Indy konnte ich bloß in der Hilfe finden.
Ich hoffe das das die richtige Version ist die ich habe: Indy.Sockets Version 10.1.1
Diese Indy-Version war bei der Installation von CodeGear Delphi 2007 dabei und ich war damit immer größten teils zufrieden!
Ich hatte früher schon öfters Indy-updates installiert aber dann funktionierte die IdHttp-Komponente nicht mehr mit SSL naja wieder zum Thema:

Meine OpenSSL DLLS heißen wie folgt: libeay32.ddl und ssleay32.dll die sind schon etwas älter aber ich kann nicht genau sagen welche Version das ist aber ich schätze die sind schon mindestens 1,5 Jahre alt!
Ich kann sie auch gerne Hochladen aber ich weiß nicht ob das gegen die Lizenzen von OpenSSL o.ä. verstößt deshalb frage ich besser nach ;-)

Sowohl FIdFTPClient als auch FIdSSLHandler habe ich aus der Komponenten Liste auf meine Form gezogen (ich weiss nicht wie man das genau nennt :gruebel: ) und sonst hmm mehr Code als ich im ersten Post geschrieben habe, habe ich selbst noch nicht da ich bis dahin die Ordner nicht auslesen konnte!
So Rufe ich die Connection auf:
Delphi-Quellcode:
procedure TForm1.btConnectClick(Sender: TObject);
begin
  if FIdFTPClient.Connected=false then
  begin
    SSLconnect;
    edDir.text:=FIdFTPClient.RetrieveCurrentDir;
    list(FIDFTPClient,lvFTP);
  end;
end;

Assertor 31. Jul 2008 19:00

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Hi gandime,

ok, danke für die Infos! Ja, das ist die Default Indy Installation von D2007.

Die DLLs solltest Du ersetzen. Das klingt nach Version ~ 0.9.6m. Probier mal bitte meine DLLs von hier http://www.delphipraxis.net/internal...hlight=openssl. Benenne das enthaltene Headerfile (bei Dir also Version 10) in IdSSLOpenSSLHeaders.pas um und lege es ins Projektverzeichnis, damit es vom Compiler gefunden wird.

Zusätzlich fällt mir an Deinem Code auf, daß Du sehr viele Dinge explizit (sogar doppelt) vorgibst. Kannst Du das zum Testen einschränken?

Beispiel:
Zitat:

Zitat von gandime
Delphi-Quellcode:
procedure TForm1.SSLconnect;
...
begin
  FIdFTPClient.Host := ed_ip.text;
  FIdFTPClient.Port := strtointdef(ed_port.text,21);
  FIdFTPClient.Username := ed_user.text;
  FIdFTPClient.Password := ed_pw.text;
  // die beiden folgenden kannst Du auch global festlegen, wird ja innerhalb des if/else nicht geändert...
  FIdFTPClient.ReadTimeout := 15000;
  FIdSSLHandler.SSLOptions.Method := sslvSSLv23;
  if cb_ssl.Checked then
  begin    
    FIdFTPClient.IOHandler := FIdSSLHandler;
  end
  else
  begin
    FIdFTPClient.IOHandler := nil;
  end;
  FIdFTPClient.Connect;
end;

try-finally ergibt hier keinen Sinn, Du machst ja nichts im Finally. Lokale Zertifikate bitte erst nach den Tests wieder einfügen. Achte auch auf den korrekten Port wenn Du utUseExplicitTLS verwendest (i.d.R. Port 21). Bei Implicit-TLS/SSL wäre das 990.

Gruß Assertor

gandime 31. Jul 2008 22:14

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Nach dem "minimirten" Code und dem OpenSSL update läuft jetzt alles super danke!
Blos jetzt hab ich noch eine frage^^
Wie erkenne ich an dem erhaltenen String von der Liste ob es sich um einen Ordner, Verknüpfung oder eine Datei handelt?
ich erhalte folgendes:
Zitat:

drwxrwxrwx 5 glftpd glftpd 42 Jul 30 11:14 archive
Das erste sind ja die Rechte
Die 5 wüsste ich jetzt nicht
Dann die zwei glftpd sind einmal Gruppe und Besitzer
Dann Dateigröße
Dann Datum
und zum schluss Name

Ich würde ja fast sagen das es etwas mit der 5 zutun hat aber bei verschiedenen Ordnern bekomme ich verschiedene Nummern!

Benedikt 31. Jul 2008 23:20

Re: idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
 
Hi,

Zitat:

Zitat von gandime
directoryrwxrwxrwx 5 glftpd glftpd 42 Jul 30 11:14 archive

aber an sich können die Indys dass doch ganz schön von sich aus verarbeiten...

MfG Benedikt


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz