Toon posts:

[C#] FTP file listing opvragen lukt niet *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik moet voor mijn school een FTP client maken

Ik ben nu al tamelijk goed onderweg, maar ik ben nu op een probleem gestoten waar ik momenteel nog geen oplossing heb voor gevonden.

Om de directory list te krijgen van de server moet er een LIST command uitgevoerd worden, eer dit gebeurd word er eerst een PORT command uitgevoerd. De server zegt dat de PORT command goed is, maar als ik dan een LIST command uitvoer, krijg ik de volgende error:

150 Opening data connection for directory list.
425 Cannot open data connection (10061).

Om het te testen werk ik via telnet op een zelf gecreëerde FTP server (BulletproofFTP). Ik heb al op Got gezocht en ook via google.

Alvast bedankt :)

Edit: Topic titel vergeten :r

[ Voor 3% gewijzigd door Verwijderd op 21-02-2004 17:17 ]


Verwijderd

Gebruik je een firewall?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Blijkbaar staat je lokale port niet open. Weet je ueberhaupt wel hoe FTP werkt?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Misschien draait ie in passive mode?
[google=FTP RFC]

[ Voor 20% gewijzigd door .oisyn op 21-02-2004 17:19 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Allereerst dank u voor de vroege antwoorden

Mijn firewall staat niet aan, ik heb ook geen firewall

En hij draait niet in passive mode

En @ Soultaker, ik weet deels hoe FTP werkt, ik ben er nog maar een maand of 2 mee bezig. Maar wat bedoel je precies met de lokale port die niet open staat?

[ Voor 37% gewijzigd door Verwijderd op 21-02-2004 17:31 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Wanneer je via port 21 met de FTP server verbind, dan heb je alleen nog maar een control connection gemaakt. Alle data, zoals de inhoud van bestanden maar ook directories (zoals hier), gaat over een aparte data connection. In active mode maakt de FTP server een verbinding van port 20 naar een data port op de client (die je eventueel zelf kunt opgegeven met het PORT commando). Die client moet dus wel een connectie op die port accepteren. Als alternatief kun je passive mode gebruiken, waarbij de FTP server een data port ter beschikking stelt, waar je als client op moet connecten.

Of je nu in passive of in active mode werkt, met alleen een control connection kan je niet zoveel. Je moet op de een of andere manier een data connection maken. Hoe dat moet staat ook beschreven in de FTP RFC (zie .oisyn). Vandaar ook mijn opmerking; zorg ervoor dat je eerst goed begrijpt hebt hoe het FTP protocol werkt, voordat je aan het programmeren slaat. Dat geldt trouwens voor al het programmeerwerk. ;)

Verwijderd

Topicstarter
Dit wist ik, daarom voer ik ook eerst het PORT command uit om een aparte data connectie te maken, de server zegt dat de PORT command succesvol is; dit moet toch betekenen dat hij de connectie aanvaardt?

Ik heb het ook al geprobeerd via passieve mode, maar dit werkte ook niet.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, met dat PORT commando geef jij aan dat jij een socket hebt geopend op jouw pc op die bepaalde poort nummer. Er is dan nog geen connectie. Pas als je de list doet dan gaat de ftp server connecten naar jouw poortnummer die je opgegeven hebt met PORT

Ik vermoed dat je de socket op die andere poort nog helemaal niet geopend hebt, de LIST mislukt dan ook omdat de ftp server niet kan connecten. Vandaar ook de error "Cannot open data connection (10061)"

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Voor de duidelijkheid over de data connection:

code:
1
2
3
4
5
6
Je connect naar de FTP.
Je verzend het command PASV
Je ontvangt een PASV-string, je connect met een nieuwe socket naar het gekregen IP en Port.
Je verzend met de normale connetie LIST
Daarna receive je met data connection
... tada en daar is hij!

Verwijderd

Topicstarter
Ik heb nu via google gezocht op FTP RFC en ik heb volgende url gevonden:

http://www.w3.org/Protocols/rfc959/Overview.html

Ik heb daar het artikel gelezen over Data transfer functions, maar daar heb ik niets gevonden over hoe ik die poort echt realiseer. Als ik via passieve mode werk volgens Cristal's methode krijg ik nog steeds dezelfde error.

Verwijderd

Messchien dam.. maar je weet ook hoe je een PASV-string ontleed om er een geldige IPEndPoint van te maken?

192,168,0,1,10,10 word:

IP: 192.168.0.1
PORT: (10* 256 + 10) = 2570

[ Voor 27% gewijzigd door Verwijderd op 21-02-2004 19:16 ]


Verwijderd

Topicstarter
Ik weet hoe ik dat moet doen, en wat je nu zegt is voor in mijn C# project te programmeren. Voor te testen of een bepaald commando werkt, gebruik ik telnet.

Verwijderd

Heb je anders wat code voor ons. Of kun je de connectie enzo even voor ons uit type in een regel iets? Messchien dat dat voor nieuwe dingen kan zorgen :)

Verwijderd

Topicstarter
De stappen die ik onderneem in telnet zijn
code:
1
2
3
4
5
User usernaam
Pass paswoord
Pasv
Port + gegevens van pasv
List

Verwijderd

Ik neem aan dat je dan ook connect op die PASV poort... wat krijg jij terug en wat zegt de server?

Verwijderd

Topicstarter
Server zegt een reeks nummers (1,2,3,4 => ip 5,6 => poort)
Ik tik deze gegevens over bij het Port commando, server antwoordt hierop dat het Port commando succesvol uitgevoerd is. Maar een List commando uitvoeren lukt nog steeds niet.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Als je PASV gebruikt, hoeft/moet je zelf geen PORT commando meer geven. Je moet dan gewoon verbinden op het gegeven adres. Doe je dat niet, dan heb je dus geen data connection en dan werkt de LIST niet.
Pagina: 1