Seite 1 von 1

FTP Verbindung - Fehler ermitteln

Verfasst: 13.01.2013 15:28
von NicknameFJ
Hallo zusammen,

eines vorweg: Ich habe von Netzwerkkommunikation, Internet usw. keine Ahnung wie das alles zusammenhängt und wie das zu programmieren ist.

Ich habe es dank der FTP-Lib von PB jedoch geschafft ein Programm zu basteln (das auch soweit funktioniert :D ) um im Hintergrund regelmäßig Daten von (m)einem FTP-Server herunterzuladen.

Jedoch stellt sich ein Problem: Ich möchte das Passwort nicht fest im Programm hinterlegen sondern der Benutzer soll es selbst einmalig beim Programmstart eingeben (ich weis das man bei einer ungesicherten FTP Verbindung das Passwort leicht aus dem Traffic heraus ermitteln kann). Der Benutzer soll nur das Passwort eingeben und - ganz wichtig - anschließend nicht mehr vom Programm belästigt werden (außer evtl bei falschem Passwort nochmals gefragt werden) !!!

Das Problem ist jetzt folgendes: Der Benutzer gibt ein Passwort ein, dass jedoch nicht stimmt. Die Verbindung mit OpenFTP kann deshalb nicht aufgebaut werden. Wie kann ich ermitteln ob es am Passwort liegt (um nochmals nach dem richtigen Passwort zu fragen) oder ob der Server vielleicht gerade DOWN ist oder sonstwas.

Ich müsste also die Serverantwort abfragen.

Bei falschem Benutzer/Passwort ist diese ja

Code: Alles auswählen

530 Login or password incorrect!
Lässt sich das (von mir) bewerkstelligen - sh. Einleitungssatz :D

Ich bräuchte dann vielleicht nicht nur einen Tip sondern ein Codebeispiel wie ich die Antwort des Servers abfangen kann.

Danke

NicknameFJ

Re: FTP Verbindung - Fehler ermitteln

Verfasst: 13.01.2013 15:59
von STARGÅTE
So wie es aussieht, gibt es ja kein FTPError() von PB aus.
Was du deswegen machen könntest ist, per Hand mittels FTP-Protokoll eine verbindung aufbauen:

Code: Alles auswählen

InitNetwork()

Define String.s, Length.i, Connection.i, Value.i

Connection = OpenNetworkConnection("srv10.sysproserver.de", 21)
If Connection
	Debug "Verbindung hergestellt."
	Repeat
		Select NetworkClientEvent(Connection) 
			Case #PB_NetworkEvent_Data
				String = Space(4096)
				Length = ReceiveNetworkData(Connection, @String, 4096)
				Debug ">>>  " + Left(String, Length)
				Value = Val(Left(String,3))
				Select Value
					Case 220
						Debug "<<<  " + "USER web482"
						SendNetworkString(Connection, "USER web482"+#CRLF$)
					Case 331
						Debug "<<<  " + "PASS ***"
						SendNetworkString(Connection, "PASS ***"+#CRLF$)
					Case 230
				EndSelect
			Default
				Delay(1)
		EndSelect
	ForEver
Else
	Debug "Verbindungsproblem zum Server."
EndIf
Verbindung hergestellt.
>>> 220 (vsFTPd 2.3.2)
<<< USER web482
>>> 331 Please specify the password.
<<< PASS ***
>>> 230 Login successful.
Dies dient dann halt zur Prüfung wo der Fehler lag, denn du bekommst ja dann eine richtig Rückmeldung.
Danach kannst du dann ja mit PB die Verbindung richtig aufbauen.

EDIT: Wie ich hier ReceiveNetworkData() benutze ist sehr "dreckig", auf keinen Fall so benutzen, wenn man ie volle Komunikation per Hand machen möchte!

Re: FTP Verbindung - Fehler ermitteln

Verfasst: 13.01.2013 16:31
von NicknameFJ
Hallo Stargate,

erstmal vielen Dank für Deine schnelle und kompetente Hilfe.

Klappt soweit sehr gut.

Eine Frage hätte ich noch:

Nachdem ich mit Deinem Code die Verbindung/Benutzer/Passwort überprüft habe wollte ich mich wieder (sauber) vom Server ausloggen.

Wollte daher nach Antwort "230" eine Abmeldung machen

Habe Deinen Code wie folgt ergänzt

Code: Alles auswählen

                Case 230
                  CloseNetworkConnection(Connection)
                  Break
und erhalte dann als Antwort (meine IP nach xxx.xxx.xxx.xxx geändert )

Code: Alles auswählen

(000088)13.01.2013 15:23:34 - USER (xxx.xxx.xxx.xxx)> 503 Bad sequence of commands.
(000088)13.01.2013 15:23:34 - USER (xxx.xxx.xxx.xxx)> disconnected.
Anscheinend ist das keine saubere Art die Verbindung zu trennen. Wie kann ich mich von Clientseite dann wieder sauber vom Server trennen?

NicknameFJ

Re: FTP Verbindung - Fehler ermitteln

Verfasst: 13.01.2013 16:34
von STARGÅTE
Mit: SendNetworkString(Connection, "QUIT"+#CRLF$)
dann bekommst du eine nette Verabschiedung ^^
<<< QUIT
>>> 221 Goodbye.
danach kannst du dann CloseNetworkConnection() machen.

Re: FTP Verbindung - Fehler ermitteln

Verfasst: 13.01.2013 16:37
von NicknameFJ
"QUIT"

Eigentlich ganz einfach wenn man weis wie es geht.

Nochmals Danke, jetzt hast Du vor mir Deine Ruhe - Schönes WE noch

NicknameFJ