FTP Pasivmode debuggen

Gast #7221682
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
Gast #7221706
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.
Gast #7221713
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 ;-)
Gast #7221727
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
Gast #7221752
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...
Gast #7221758
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
Gast #7221835
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
Gast #7221943
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
Gast #7222257
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren