Entwickler-Ecke
ASP.NET und Web - System.Net.Ftpclient Library und Verbindung zu Drftpd
hexxler - Do 31.07.14 16:27
Titel: System.Net.Ftpclient Library und Verbindung zu Drftpd
Hallo liebe Forenmitglieder,
ich bin neu in der C# Entwicklung und will einen Ftpclienten programmieren, der auch für Drftpd funktioniert. Drftpd hat spezielle Eigenheiten nämlich den PRET Befehl. Da die normal Ftp Library von Microsoft diesen Befehl nicht unterstützt, habe ich mich für die System.Net.Ftpclient.dll von netftp.codeplex.com entschieden, da diese laut Doku den PRET Befehl unterstützt. Ich habe jedoch ein Problem mit dem File Listing.
Folgenden Code benutze ich:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| void connectbuttonclick (object sender, EventArgs e) { FtpClient client = new FtpClient(); client.Host = ****; client.Port = *****; client.Credentials = new NetworkCredential(user, pass); client.Connect(); client.BeginGetListing(new AsyncCallback(GetListingCallback), client); }
static void GetListingCallback(IAsyncResult ar) { FtpClient client = ar.AsyncState as FtpClient;
try { if (client == null) throw new InvalidOperationException("The FtpControlConnection object is null!");
foreach (FtpListItem item in client.EndGetListing(ar)) Console.WriteLine(item); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { System.Threading.Thread.Sleep(10); } |
und erhalte folgende Fehlermeldung vom DrFTPD-Server:
500 You need to use a client supporting PRET (PRE Transfer) to use PASV
Ich habe schon in den Source der Library geschaut und dort wird nach dem FEAT Befehl nach PRET gesucht und sofern gefunden, wird ein Parameter gesetzt. Ich habe bereits mit einem anderen Ftpclienten zum DrFTPD verbunden und geschaut was denn FEAT liefert und siehe da es kommt in der zweiten Zeile PRET. Ich habe keine Ahnung woran das noch liegen könnte, vielleicht könnt ihr mir weiterhelfen.
Grüße
Moderiert von Th69: B- durch C#-Tags ersetzt
hexxler - Do 31.07.14 19:35
Hallo :) ,
ja die haben meinen Post geschlossen weil mir niemand weiterhelfen konnte, daher versuche ich es nun hier in der Hoffnung dass hier vielleicht jemand Erfahrung mit der Library hat. Ich werde dann mal den Debugger anwerfen vielleicht finde ich ja was und melde es dann hier.
Grüße
hexxler - Fr 01.08.14 13:40
Hallo,
Danke für die Antwort erstmal. Es hat mir aufjedenfall teilweise weitergeholfen. Ich habe meine Code nun umgebaut und das ganze vorgefertigte BeginConnect weggelassen:
C#-Quelltext
1: 2: 3:
| client.Execute("PRET LIST")); client.Execute("PASV"); client.Execute("LIST -al"); |
Jetz das Debugging Ergebnis:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| 230 Administrator logged in successfully. FEAT 211-Extensions supported: PRET AUTH SSL PBSZ CPSV SSCN MLST type*,x.crc32*,size*,modify*,unix.owner*,unix.group*,x.slaves*,x.xfertime* CLNT NOOP 211 End Text encoding: System.Text.ASCIIEncoding PRET LIST 200 OK, will use master for upcoming transfer PASV 227 Entering Passive Mode (192,168,80,128,7,212). LIST -al 150 File status okay; about to open data connection. |
Genau wie beschrieben in dem Link. Also aufjedenfall mal einen Schritt weiter nun ist die Frage, wenn ich das von Hand mache und nicht die Listing Routine der Library verwende wie ich weitermache.. Wenn ich mit meinem Flashfxp auf meinen Server gehe, dann kommt:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| [R] PRET LIST [R] 200 OK, will use master for upcoming transfer [R] PASV [R] 227 Entering Passive Mode (192,168,80,128,7,217). [R] Opening data connection IP: **.***.**.** PORT: 2009 [R] LIST -al [R] 150 File status okay; about to open data connection. |
Ich muss mich mal erkundigen wie genau das mit der Passive Methode genau funktioniert, ich weiss bisher nur dass der Server dann einen Port aufmacht und den dann dem Clienten übergibt, wie man hier auch schön sehen kann. Der Client wird dann auf den Port verbinden und sich irgendwie dort das Listing holen, so denke ich (:. Ich melde mich, sobald ich mehr weiss. Andere die vielleicht noch Ideen haben sind natürlich herzlich willkommen...
Viele Grüße
Moderiert von Th69: B- durch C#- bzw. Code-Tags ersetzt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!