FTP Verbindung - Fehler ermitteln

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

FTP Verbindung - Fehler ermitteln

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: FTP Verbindung - Fehler ermitteln

Beitrag 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!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: FTP Verbindung - Fehler ermitteln

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: FTP Verbindung - Fehler ermitteln

Beitrag von STARGÅTE »

Mit: SendNetworkString(Connection, "QUIT"+#CRLF$)
dann bekommst du eine nette Verabschiedung ^^
<<< QUIT
>>> 221 Goodbye.
danach kannst du dann CloseNetworkConnection() machen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: FTP Verbindung - Fehler ermitteln

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Antworten