FTP Kommunikation

hotspott

Grünschnabel
So, mein erster Beitrag :)
Erstmal ein fröhliches Hallo :)


Und jetzt zum wesentlichen,
ich stehe vor folgendem Problem:
Ich baue eine Verbindung mit einem FTP-Server auf,
an Steuerport 21,
funktioniert auch alles super.
Doch wenn ich die Datenverbindung über den Befehl, "PORT" öfnnen will,
kommt immer der Fehler: "501 Bas Parameter. Numeric value required".
Woran kann das liegen was mach ich falsch?
Hier nochmal, der ganze Befehl:
"PORT 80,130,158,47,4,20"
Überhaupt, wo für stehen die letzen beiden Zahle?
alles was ich finde ist für den Port, aber warum 2? ein Port ist doch nur eine Zahl.
ich hab die letzten Ziffern aus einem Beispiel.

mfG
Hotspott
 

Adrian_Broher

Erfahrenes Mitglied
Überhaupt, wo für stehen die letzen beiden Zahle?
alles was ich finde ist für den Port, aber warum 2? ein Port ist doch nur eine Zahl.
ich hab die letzten Ziffern aus einem Beispiel.

http://www.faqs.org/rfcs/rfc959.html

Die letzten 2 Zahlen sind der tcp port als 16 bit short format in bytes aufgespalten.

DATA PORT (PORT)

The argument is a HOST-PORT specification for the data port
to be used in data connection. There are defaults for both
the user and server data ports, and under normal
circumstances this command and its reply are not needed. If
this command is used, the argument is the concatenation of a
32-bit internet host address and a 16-bit TCP port address.
This address information is broken into 8-bit fields and the
value of each field is transmitted as a decimal number (in
character string representation). The fields are separated
by commas. A port command would be:

PORT h1,h2,h3,h4,p1,p2

where h1 is the high order 8 bits of the internet host
address.
 

hotspott

Grünschnabel
Ja genau die Seite hab ich gefunden, aber was ist bitte ein Port, in 16 Bit, short Format?

und wieso funktioniert das den jetzt nicht?
also warum kommt die Fehlermeldung?

Trodzdem Danke für deine Bemühung :)
 

hotspott

Grünschnabel
Okey, hat sich erledigt, hab ein Fehler gemacht, ein ganz anderen, aber trodzdem frag ich mich noch wie aus zwei Zahlen eine werden soll****
 

Adrian_Broher

Erfahrenes Mitglied
Okey, hat sich erledigt, hab ein Fehler gemacht, ein ganz anderen, aber trodzdem frag ich mich noch wie aus zwei Zahlen eine werden soll****

Die Antwort dazu ist von der zur Implementierung genutzten Sprache abhängig. Prinzipiell wird der Wert von p1 per Bitshift um 8 Bits nach links verschoben und mit dem Wert von p2 addiert. Du erhältst dann eine 16 bit Grosse Ganzzahl (In C Sprachen entspricht dies üblicherweise dem short Datentypen), welche den Port repräsentiert.
 

hotspott

Grünschnabel
Sry leute aber ich versteh das immernoch nicht :(
Könnt ihr mir vielleicht mal ein Beispiel geben für das Port 20.
würde mir sehr helfen!

Wen ich das jetzt richtig verstanden habe wird laut Wikipedia aus 4mit der verschiebung 8:

4-->00000100--(um 1nen nach links verschieben)-->00001000-->8
und das addiere ich auf 182, so komm ich auf 190 ist das so z.b richtig?
 
Zuletzt bearbeitet:

Adrian_Broher

Erfahrenes Mitglied
Code:
PORT 192,168,2,1,42,23

ergibt

Code:
192.168.2.1:10775

auf den Port kommst du wie folgt:

42 ist das high order byte des ports und wird damit um 8 bit nach links verschoben.
23 ist das low order byte des ports und wird addiert.

42 in Binaerdarstellung ist
Code:
0010 1010
23 in Binaerdarstellung ist
Code:
0001 0111

Das high order byte wird um 8 bits nach links verschoben:
Code:
0010 1010 0000 0000
und hat damit den Wert 10752.

High order und low order bit werden addiert: 10752 + 23 = 10775
 

hotspott

Grünschnabel
Super großen Dank!
Ich gehemal davon aus das deine Berechnung richtig ist ;)
und der fehler dann bei mir liegt.
nur um nochmal auf nummersicher zu gehen, der FTP-Server sucht danach mich, nicht ich muss die Verbindung zu ihm auf bauen oder?