Hallo Forum,
Moin auch!
Mal ein paar Kommentare von mir:
Nach meinem Erkenntnisstand baut ein FTP-Client eine Verbindung zu dem gewünschten FTP-Server normalerweise über den dafür reservierten Port 20 (?) auf.
Da der FTP-Server diesen Port aber nicht dauerhaft belegt haben will, handeln Client und Server anschließend andere Ports aus, über welche dann tatsächlich Daten übertragen werden - genau so, wie das bei HTTP mit Port 80 läuft, der auch nur für die Verbindungsaufnahme zuständig ist.
Das ist definitiv FALSCH. Bei der HTTP-Kommunikation laufen alle Verbindungen zwischen Client und Server auf der Serverseite ausschließlich über Port 80. Nur der Client benutzt wechselnde Ports, aber niemals Port 80, da in der Regel für ausgehende Verbindungen freie Ports oberhalb von 1024 benutzt werden - je neuer Verbindung ein neuer Port, damit man die Verbindungen irgendwie unterscheiden kann.
Bei FTP mag das anders sein, da gibts neben dem normalen Port 21 auch noch einen Port 20 für "FTP-Data", der augenscheinlich für Datentransport zuständig ist.
Der Client nimmt in meinen Fall nun irgendwelche Ports, die ggf. im Bereich zwischen 1800 und knapp über 2000 liegen. Genau darauf behauptet der Programmierer, keinen Einfluß zu haben: Er ruft eine Windows-API "gib mir einen freien Port" auf und nimmt, was er zurück bekommt. (Seine "Programmiersprache" ist Borland-Delphi.)
Korrekt!
Bei den genannten Ports sind allerdings einige "well-known ports" dabei - jedenfalls nach der Aufffassung unserer Firmen-Firewall. (Beispiel: 2045) Selbige ist fest davon überzeugt, daß über diese speziellen Ports andere Protokolle als FTP zu laufen haben, und bricht den Kommunikationsversuch an dieser Stelle ab: Offenbar hat da ja irgend ein böser Angreifer versucht, einen Port zweckzuentfremden.
Das ist Sache der Firmen-Firewall, zu entscheiden, ob von innen heraus irgendwelche Ports benutzt werden dürfen, die normalerweise auch von anderen Programmen benutzt werden. Auf diese Weise sperrt man zum Beispiel die MP3-Sharing-Programme, solange die den Default-Port benutzen.
Gerade bei der Übertragung einer großen Anzahl von Dateien (FTP-"MGET") werden auf diese Weise sehr viele verschiedene Ports verwendet - und früher oder später würfelt der Client schlecht und erwischt einen Port, bei dem ihm die Firewall auf die Finger haut. Die Übertragung vieler kleiner Dateien bricht also alle paar Minuten ab - die Übertragung einiger weniger großer Dateien funktioniert dagegen reibungslos.
Da mußt du deinem Netzwerkadministrator auf die Finger hauen, daß er die Firewall mal etwas freundlicher konfiguriert.
Meine Frage wäre nun im wesentlichen:
- Kann der FTP-Client unter Windows irgendwie den Port, den er für die Übertragung einer einzelnen Datei nehmen will, gezielt setzen?
Eine Abfrage an das Betriebssystem, ob der Port frei ist, muß natürlich weiterhin sein - es laufen ja ggf. noch weitere Programme, die FTP machen, eventuell sogar dasselbe Programm in mehreren Instanzen.
Der Programmierer des FTP-Client hat empfohlen, im "passive mode" zu arbeiten; der Firewall-Administrator meinte dazu, das müßten dann aber die entsprechenden FTP-Server auch unterstützen, und das wäre (im WWW) nicht gerade die Regel ... ?
Genau. Der Passive-Mode nutzt irgendwie bestehende Verbindungen zur Datenübertragung, wird aber tatsächlich nicht unbedingt von allen FTP-Servern unterstützt. Ausprobieren heißt die Devise.
Wenn ich mich recht erinnere, dann ist FTP im Normalfall so ein Protokoll, welches ständig neue Verbindungen zum Server knüpft (also im Gegensatz zu HTTP). Passive Mode unterbindet das, und könnte in deinem Fall wirklich helfen.
Mit der Hoffnung auf (für mich) überraschende neue Erkenntnisse
Überrascht?
- Sven Rautenberg