AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout
Thema durchsuchen
Ansicht
Themen-Optionen

idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout

Ein Thema von gandime · begonnen am 31. Jul 2008 · letzter Beitrag vom 4. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
gandime
(Gast)

n/a Beiträge
 
#1

idFTP.list bei glftpd (ftpserver) +ssl ->Read Timeout

  Alt 31. Jul 2008, 00:28
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

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

  Alt 31. Jul 2008, 07:12
Moin,

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

Grüße vom marabu
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#3

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

  Alt 31. Jul 2008, 07:30
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:
List(FIdFTPClient);
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

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

  Alt 31. Jul 2008, 10:47
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
Frederik
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#5

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

  Alt 31. Jul 2008, 16:56
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)
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#6

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

  Alt 31. Jul 2008, 17:22
Hi gandime,

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
Frederik
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#7

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

  Alt 31. Jul 2008, 18:38
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 ) 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;
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#8

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

  Alt 31. Jul 2008, 20:00
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 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
Frederik
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#9

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

  Alt 31. Jul 2008, 23:14
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!
  Mit Zitat antworten Zitat
Benedikt
(Gast)

n/a Beiträge
 
#10

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

  Alt 1. Aug 2008, 00:20
Hi,

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:28 Uhr.
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