Forum: PC-Programmierung FTP Pasivmode debuggen


von ftp _nix_versteher (Gast)


Lesenswert?

Guten Abend,
ich versuche gerade auf einer Sps die per Codesys3,5 programmiert wird 
einen FTP Client zum laufen zu bringen.
Ich möchte dem FTP Server eine csv Datei Senden. Wenn ich mit Curl an 
den Server eine Datei senden möchte dann funktioniert es.

Ich Verwende dazu die Network Lib von Oscat.
Ich komme bis zum Punkt wo ich vom FTP Server Folgende Nachricht 
bekomme:
"227 Entering Passive Mode (IP,IP,IP,IP,195,80)." (habe die Ip hier mit 
IP ersetzt)
Als nächstes sendet die Lib
"STOR /data/filename.csv"  (die Daten sollen in das Verzeichnis data)

darauf bekomme ich die Antwort des Servers "500 Internal error"

Weiß jemand was sich der Server nach "227 Entering Passive Mode 
(IP,IP,IP,IP,195,80)." erwartet?

Danke für die Hilfe

von seere (Gast)


Lesenswert?

Er erwartet, das du die Datenverbindung (du sprichst ja gerade auf der 
Controlverbindung mit ihm) zu der von ihm angegebenen IP/Port 
Kombination per TCP aufbaust und darüber nach dem STOR die Daten 
schickst. In deinem Beispiel ist 195 das High-Byte und 80 das Low-byte 
(jeweils dezimal) der 16-Bit Portnummer des Servers, auf dem er auf den 
Aufbau der Datenverbindung wartet.

von quotendepp (Gast)


Lesenswert?

ftp _nix_versteher schrieb:
> Weiß jemand was sich der Server nach "227 Entering Passive Mode
> (IP,IP,IP,IP,195,80)." erwartet?

dass vom client ein socket zur angegebenen ip und port aufgebaut wird, 
über den die daten übertragen werden können.

nur beim zeitlichen ablauf (zuerst stor, dann daten oder umgekehrt) bin 
ich mir nicht mehr sicher. ist auch erst 15 jahre oder so her dass ich 
mir eine ftp lib geschrieben habe ;-)

von quotendepp (Gast)


Lesenswert?

nachtrag: zu langsam...

von ftp _nix_versteher (Gast)


Lesenswert?

Hallo @seere
Ja die Lib hat den den Port 50000 aus dem  "227 Entering Passive Mode 
(IP,IP,IP,IP,195,80)." extraiert.
Und gibt die IP und den Port weiter.
Und schickt dann "STOR /data/filename.csv"

Die Lib erwartet 125 oder 150 als Antwort damit sie weiter macht.
Wie kann ich hier weiter vor gehen?

Danke für die Hilfe

von ftp _nix_versteher (Gast)


Angehängte Dateien:

Lesenswert?

hier ein kleines Bild

von seere (Gast)


Lesenswert?

500 deines FTP Servers ist ein Errorcode des Servers.
Besteht zum Zeitpunkt des STOR denn eine TCP Verbindung zu Port 50000?

von ftp _nix_versteher (Gast)


Lesenswert?

seere schrieb:
> 500 deines FTP Servers ist ein Errorcode des Servers.
> Besteht zum Zeitpunkt des STOR denn eine TCP Verbindung zu Port 50000?

Wie könnte ich das raus finden?

von seere (Gast)


Lesenswert?

Nachschauen? Auf der Kiste von der aus dein Programm läuft? Ich glaube 
selbst Windows-Büchsen haben sowas wie netstat an Bord.

Oder den Netzverkehr auf der Kiste mit deinem Programm mitschneiden und 
analysieren (wireshark to the rescue!)

Oder mit einer Linuxkiste mit zwei Netzwerkinterfaces eine Bridge 
dazwischenhängen und über die den Netzwerkverkehr beobachten?

Oder die Kiste mit deinem Programm und die SPS an einen managebaren 
Switch hängen, den Traffic der beiden Ports an einen Monitorport 
ausleiten und wieder (vorzugsweise Linuxkiste) an diesem Port den 
Netzverkehr analysieren.

Möglichkeiten fallen mir viele ein...

von (prx) A. K. (prx)


Lesenswert?

Lassen sich die FTP-Operationen per PC als Client testweise durchführen?

von ftp _nix_versteher (Gast)


Lesenswert?

Ok ich werde Morgen mal einen Switch zum Mitschneiden dazwischen 
klemmen.
Mal sehen ob ich mit Wireshark zurecht komme.
Ist lange her das ich damit gespielt habe.

Noch eine Frage ist es richtig das man "STOR /data/filename.csv" 
schreibt?
Warum sendet man schon den Filenamen ob wohl die Übertragung noch nicht 
begonnen hat?

Danke für die Hilfe

von ftp _nix_versteher (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Lassen sich die FTP-Operationen per PC als Client testweise durchführen?

Ja vom Pc aus kann ich per Curl die Datei übertragen
1
curl --ftp-pasv ftp://cloud.xx.xx/data/ -u "user:pass" -T "/flash/plc/applications/fielname.csv"

von (prx) A. K. (prx)


Lesenswert?

ftp _nix_versteher schrieb:
> Ja vom Pc aus kann ich per Curl die Datei übertragen

Das las ich. Aber es geht um die exakten FTP Kommandos, die dabei 
verwendet werden. Sowas wie das "STOR". Im Vergleich zu dem, was dein 
Client macht. Müsste sich dem curl irgendwie entlocken lassen.

: Bearbeitet durch User
von ftp _nix_versteher (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Lassen sich die FTP-Operationen per PC als Client testweise durchführen?

Wie könnte ich das machen?

von (prx) A. K. (prx)


Lesenswert?

Das zeigt dir, was curl anders macht als du:
curl -v ...

: Bearbeitet durch User
von ftp _nix_versteher (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Das zeigt dir, was curl anders macht als du:
> curl -v ...

Geil vielen Dank!

Was bedeuten am Zeilen Anfang die * < > Zeichen?
Danke Vielmals

von (prx) A. K. (prx)


Lesenswert?

ftp _nix_versteher schrieb:
> Was bedeuten am Zeilen Anfang die * < > Zeichen?

Sieht man das nicht?
> Request vom Client
< Response vom Server
* Traceinfo vom curl

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

ftp _nix_versteher schrieb:
> Noch eine Frage ist es richtig das man "STOR /data/filename.csv"
> schreibt?

Kommt drauf an, was du machen musst. Das ist ein absoluter Pfad auf dem 
Zielsystem oder in einem chroot-jail des FTP-Servers. Möglicherweise ist 
STOR data/filename.csv besser. Oder CWD data und STOR filename.csv.

: Bearbeitet durch User
von ftp _nix_versteher (Gast)


Lesenswert?

(prx) A. K. schrieb:
> ftp _nix_versteher schrieb:
>> Was bedeuten am Zeilen Anfang die * < > Zeichen?
>
> Sieht man das nicht?
>> Request vom Client
> < Response vom Server
> * Traceinfo vom curl

Der Stern hat mich irritiert.
Danke
1
# curl -v --ftp-pasv ftp://cloud.xxx.xx/data/ -u "user:pass" -T "/flash/plc/applications/filename.csv"
2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
3
                                 Dload  Upload   Total   Spent    Left  Speed
4
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0< 220 Welcome.
5
> USER xxxxxx
6
< 331 Password required for xxxxxxx.
7
> PASS xxxxxxxxx
8
< 230 User xxxxxxxx logged in.
9
> PWD
10
< 257 "/" is current directory.
11
> CWD data
12
< 250 CWD command successful
13
> EPSV
14
< 502 Command not implemented
15
> PASV
16
< 227 Entering Passive Mode (xxx,xxx,xxx,xxx,195,80).
17
> TYPE I
18
< 200 Transfer type set.
19
> STOR fielname.csv
20
< 150 Opening PASV data connection.
21
} [288 bytes data]
22
< 226 Transfer complete. Received 288 bytes.
23
100   288    0     0  100   288      0   1224 --:--:-- --:--:-- --:--:--  1333
24
~ #

So sieht es aus.
Wo wird der Pfad data gesetzt?
Weil Curl macht STOR filename.csv und mein Programm macht STOR 
/data/filename.csv

von (prx) A. K. (prx)


Lesenswert?

ftp _nix_versteher schrieb:
> Wo wird der Pfad data gesetzt?

Also so langsam zweifle ich daran, dass deine Fragerei ernst ist und 
dass das hier Sinn ergibt.

> CWD data
< 250 CWD command successful

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

ftp _nix_versteher schrieb:
> STOR fielname.csv

Sach mal, hast du das Protokoll abgetippt?

: Bearbeitet durch User
von Peter Pan (Gast)


Lesenswert?


von ftp _nix_versteher (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Kommt drauf an, was du machen musst. Das ist ein absoluter Pfad auf dem
> Zielsystem oder in einem chroot-jail des FTP-Servers. Möglicherweise ist
> STOR data/filename.csv besser. Oder CWD data und STOR filename.csv.

Ich Verstehe nicht ganz muss mal chroot-jail  CWD data und STOR 
filename.csv.
googeln.

(prx) A. K. schrieb:
> Also so langsam zweifle ich daran, dass deine Fragerei ernst ist und
> dass das hier Sinn ergibt.
>
>> CWD data
> < 250 CWD command successful

Wie ich bereits ganz am Anfang geschrieben habe ist das eine Fertige LIB 
von OSCAT leider funktioniert diese aber nicht.
Also möchte ich versuchen das Ding zu reparieren.

Peter Pan schrieb:
> Spricht etwas gegen eine fertige Bibliothek?

Nichts meine Sps ist aber für Codesys da ist mit siemens nichts.
Danke für die Hilfe

von Peter Pan (Gast)


Lesenswert?

ftp _nix_versteher schrieb:
> Nichts meine Sps ist aber für Codesys da ist mit siemens nichts.

Kann man den Code der Bibliothek bei Siemens denn lesen?

Ansonsten würde ich mir an einer simplen Open Source Bibliothek 
orientieren, ggf eher mit HTTP Rest...

von bluppdidupp (Gast)


Lesenswert?

Eine ältere Seite, aber recht brauchbar als grobe Übersicht zum 
FTP-Protokoll:
https://cr.yp.to/ftp.html

von ftp _nix_versteher (Gast)


Lesenswert?

So jetzt funktioniert die Lib.
Habe den Befehl 'CWD Path' eingebaut und siehe da der Rest funktioniert.

Danke allen für die Hilfe. Besonders nützlich war für Curl der Parameter 
-v
Wenn man weiß was ein funktionierendes Programm macht ist das Nachmachen 
deutlich einfacher.

Vielen Dank an alle.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.