PORT befehl bei FTP
PORT befehl bei FTP
Hallo
Ich weiß ich habs gerade mit den Protokollen^^
Kann mir jemand den PORT befehl erklären?
Ich weiß es müssen 6 zahlen übergeben werden
die 1. vier zahlen sind die IP adresse
aber was ist die 5. und die 6. zahl?
und was hat das alles mit dem port zu tun?
Und noch eine Frage: was soll cih für die 5. und die 6. Zahl einsetzen? ich hab bei LeechFTP beobachtet das es als 5. zahl 17 hat und als 6. zahl irgendwas mit 100. dann hab ich ein paar mal das verzeichnis aktuallisiert, solange bis die 6. zahl auf 255 war und danach wieder 0 wurde und dafür die 5. zahl um eins höher. Teilweiße wurden auch ein paar zahlen übersprungen.
Ich weiß ich habs gerade mit den Protokollen^^
Kann mir jemand den PORT befehl erklären?
Ich weiß es müssen 6 zahlen übergeben werden
die 1. vier zahlen sind die IP adresse
aber was ist die 5. und die 6. zahl?
und was hat das alles mit dem port zu tun?
Und noch eine Frage: was soll cih für die 5. und die 6. Zahl einsetzen? ich hab bei LeechFTP beobachtet das es als 5. zahl 17 hat und als 6. zahl irgendwas mit 100. dann hab ich ein paar mal das verzeichnis aktuallisiert, solange bis die 6. zahl auf 255 war und danach wieder 0 wurde und dafür die 5. zahl um eins höher. Teilweiße wurden auch ein paar zahlen übersprungen.
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

aso...
also wenn das so ist dann schätze ich mal ist die 5. zahl auch bis 255 und geht dann wieder von 0 los.
d.h. die beiden zahlen variieren zwischen 0 und 255 d.h. 256 möglichkeiten.
http://www.google.de/search?q=256*256
Das wäre dann genau die anzahl an ports die es gibt.
aber jetzt noch zu meiner zweiten frage, wie wird der port gewählt?
Ich hab eine FTP Protokollerklärung gelesen und da stand drin das der port 21 zum komunizieren ist und der port 20 zum daten übertragen.
gibt es da jetzt noch einen dritten port oder was?
Dann nochmal eine frage: wenn ich jetzt vom server die antwort bekomme das der portbefehl funktioniert hat und das ich PASV benutzen soll was mach ich dann? Ich hab in dem Protokoll von LeechFTP nachgeschaut und der macht dann nix bzw. protokolliert nix. muss ich dann schon das PASV nutzen oder wie ist das?
[Edit]warum funktionieren die URL tags nicht?
[/Edit]
also wenn das so ist dann schätze ich mal ist die 5. zahl auch bis 255 und geht dann wieder von 0 los.
d.h. die beiden zahlen variieren zwischen 0 und 255 d.h. 256 möglichkeiten.
http://www.google.de/search?q=256*256
Das wäre dann genau die anzahl an ports die es gibt.
aber jetzt noch zu meiner zweiten frage, wie wird der port gewählt?
Ich hab eine FTP Protokollerklärung gelesen und da stand drin das der port 21 zum komunizieren ist und der port 20 zum daten übertragen.
gibt es da jetzt noch einen dritten port oder was?
Dann nochmal eine frage: wenn ich jetzt vom server die antwort bekomme das der portbefehl funktioniert hat und das ich PASV benutzen soll was mach ich dann? Ich hab in dem Protokoll von LeechFTP nachgeschaut und der macht dann nix bzw. protokolliert nix. muss ich dann schon das PASV nutzen oder wie ist das?
[Edit]warum funktionieren die URL tags nicht?

kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

Eigentlich ist der Port 20 für die Datenübertragung vorgesehen aber
Heute hält sich kein Server mehr daran
. Das liegt daran, dass die
Server alle jetzt mehr als einen Port verwalten können. Der Port wird
dann per Zufallsprinzip gesucht und wenn er frei ist gleich reserviert.
Zum PASV fragste mich jetzt was. Ich habe da leider nicht mehr genau
ne Idee was das war. Irgendwas mit Passiv ist mir klar
.
Als ich das letzte mal ein FTP Clienten geproggt habe, der auch wirklich
funktionieren sollte war das villt mit 12-13 Jahren und VB
.
Was ich dir aber empfehlen kann, ist Wikipedia. In jeder Hinsicht zu jeder
Zeit zu jedem Zweck brauchbar
:
http://de.wikipedia.org/wiki/File_Transfer_Protocol
Heute hält sich kein Server mehr daran

Server alle jetzt mehr als einen Port verwalten können. Der Port wird
dann per Zufallsprinzip gesucht und wenn er frei ist gleich reserviert.
Zum PASV fragste mich jetzt was. Ich habe da leider nicht mehr genau
ne Idee was das war. Irgendwas mit Passiv ist mir klar

Als ich das letzte mal ein FTP Clienten geproggt habe, der auch wirklich
funktionieren sollte war das villt mit 12-13 Jahren und VB

Was ich dir aber empfehlen kann, ist Wikipedia. In jeder Hinsicht zu jeder
Zeit zu jedem Zweck brauchbar

http://de.wikipedia.org/wiki/File_Transfer_Protocol
also wenn er was von PASV sagt dann muss ich das machen oder?
Ich bin mir nicht sicher weil mein FTP client protokolliert alles was er macht aber von dem befehl PASV ist nichts zu sehen.
Ich bin mir nicht sicher weil mein FTP client protokolliert alles was er macht aber von dem befehl PASV ist nichts zu sehen.
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Kannste die Prozeduren mal umschreiben(dies ist die Clientseite):
Beim PASV Befehl wird nämlich dieser 6 Stellige Code(Beispiel siehe unten) zurückgegeben, damit der Client weiß wohin er connecten soll.
Das ganze kann man glaube ich auch bei Wikipedia nachlesen.
Code: Alles auswählen
Procedure.s PassiveIP(Text.s)
s = FindString(Text, "(", 1)+1
l = FindString(Text, ")", s)-s
Host.s = Mid(Text, s, l)
IP.s = StringField(Host, 1, ",")+"."+StringField(Host, 2, ",")+"."+StringField(Host, 3, ",")+"."+StringField(Host, 4, ",")
ProcedureReturn IP.s
EndProcedure
Procedure.l PassivePort(Text.s)
s = FindString(Text, "(", 1)+1
l = FindString(Text, ")", s)-s
Host.s = Mid(Text, s, l)
Port = Val(StringField(Host, 5, ","))*256+Val(StringField(Host, 6, ","))
ProcedureReturn Port
EndProcedure
Beispielanwendung meiner Prozeduren:PASV Rückmeldung hat geschrieben:227 Entering Passive Mode (217,13,197,212,15,62)
Code: Alles auswählen
Procedure.s PassiveIP(Text.s)
s = FindString(Text, "(", 1)+1
l = FindString(Text, ")", s)-s
Host.s = Mid(Text, s, l)
IP.s = StringField(Host, 1, ",")+"."+StringField(Host, 2, ",")+"."+StringField(Host, 3, ",")+"."+StringField(Host, 4, ",")
ProcedureReturn IP.s
EndProcedure
Procedure.l PassivePort(Text.s)
s = FindString(Text, "(", 1)+1
l = FindString(Text, ")", s)-s
Host.s = Mid(Text, s, l)
Port = Val(StringField(Host, 5, ","))*256+Val(StringField(Host, 6, ","))
ProcedureReturn Port
EndProcedure
Text.s = "227 Entering Passive Mode (217,13,197,212,15,62)"
Debug PassiveIP(Text.s)
Debug PassivePort(Text.s)
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
das heißt der port ist folgender:
Code: Alles auswählen
zahl5 * 256 + zahl6
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Jazigapeda hat geschrieben:das heißt der port ist folgender:Code: Alles auswählen
zahl5 * 256 + zahl6
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
mal eine frage:
was muss ich genau tun (bzw. senden) nach dem upload einer datei?
ich lade jetzt eine datei hoch und dann ist sie mit meiner IP und dem PORT den ich verwendet hab auf dem server.
-wie geht das umbenennen
-wie geht das format festlegen also wenn es eine JPG ist oder so oder ist das bereits teil des umbenennen?
was muss ich genau tun (bzw. senden) nach dem upload einer datei?
ich lade jetzt eine datei hoch und dann ist sie mit meiner IP und dem PORT den ich verwendet hab auf dem server.
-wie geht das umbenennen
-wie geht das format festlegen also wenn es eine JPG ist oder so oder ist das bereits teil des umbenennen?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Eventuell kannst du es ja gebrauchen:
Code: Alles auswählen
Global EOL.s
EOL.s = Chr(13)+Chr(10)
Procedure.s PassiveIP(Text.s)
s = FindString(Text, "(", 1)+1
l = FindString(Text, ")", s)-s
Host.s = Mid(Text, s, l)
IP.s = StringField(Host, 1, ",")+"."+StringField(Host, 2, ",")+"."+StringField(Host, 3, ",")+"."+StringField(Host, 4, ",")
ProcedureReturn IP.s
EndProcedure
Procedure.l PassivePort(Text.s)
s = FindString(Text, "(", 1)+1
l = FindString(Text, ")", s)-s
Host.s = Mid(Text, s, l)
Port = Val(StringField(Host, 5, ","))*256+Val(StringField(Host, 6, ","))
ProcedureReturn Port
EndProcedure
Procedure.s Wait(ConnectionID, Timeout)
Delay(10)
*Buffer = AllocateMemory(60000)
t = ElapsedMilliseconds()
While NetworkClientEvent(ConnectionID) <> 2 And ElapsedMilliseconds()-t < Timeout : Delay(1) : Wend
If ElapsedMilliseconds()-t < Timeout
Size = ReceiveNetworkData(ConnectionID, *Buffer, 60000)
Text.s = PeekS(*Buffer)
FreeMemory(*Buffer)
ProcedureReturn Text
EndIf
EndProcedure
Procedure Wait2(ConnectionID, *Buffer, Size, Timeout)
Delay(50)
t = ElapsedMilliseconds()
While NetworkClientEvent(ConnectionID) = 0 And ElapsedMilliseconds()-t < Timeout : Delay(1) : Wend
If ElapsedMilliseconds()-t < Timeout
CurSize = ReceiveNetworkData(ConnectionID, *Buffer, Size)
While CurSize < Size
If NetworkClientEvent(ConnectionID) = 2
CurSize + ReceiveNetworkData(ConnectionID, *Buffer+CurSize, Size-CurSize)
EndIf
Wend
ProcedureReturn CurSize-1
EndIf
EndProcedure
Procedure SendNetworkString2(ConnectionID, String.s)
SendNetworkString(ConnectionID, String.s)
EndProcedure
Procedure FTP_Connect(Server.s, Port, Name.s, Pass.s)
ConnectionID = OpenNetworkConnection(Server, Port)
If ConnectionID
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "220"
SendNetworkString2(ConnectionID, "USER "+Name.s+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "331"
SendNetworkString2(ConnectionID, "PASS "+Pass.s+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "230"
SendNetworkString2(ConnectionID, "TYPE A"+EOL)
Wait(ConnectionID, 5000)
ProcedureReturn ConnectionID
EndIf
EndIf
EndIf
CloseNetworkConnection(ConnectionID)
EndIf
EndProcedure
Procedure FTP_SetCurrentDirectory(ConnectionID, Path.s)
If ConnectionID
SendNetworkString2(ConnectionID, "CWD "+Path.s+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
SendNetworkString2(ConnectionID, "PWD"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "257"
ProcedureReturn 1
EndIf
EndIf
EndIf
EndProcedure
Procedure.s FTP_List(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "TYPE A"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "200"
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "227"
Passive = OpenNetworkConnection(PassiveIP(Text.s), PassivePort(Text.s))
If Passive
SendNetworkString2(ConnectionID, "LIST"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "150"
Text.s = Wait(ConnectionID, 5000)
Delay(10)
Result.s = Wait(Passive, 5000)
CloseNetworkConnection(Passive)
Text.s = Wait(ConnectionID, 5000)
ProcedureReturn Result
EndIf
CloseNetworkConnection(Passive)
Else
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure.s FTP_NameList(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "TYPE A"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "200"
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 5000)
Debug "PASV Rückmeldung: "+Text
If Left(Text, 3) = "227"
Passive = OpenNetworkConnection(PassiveIP(Text.s), PassivePort(Text.s))
If Passive
SendNetworkString2(ConnectionID, "NLST"+EOL)
Delay(100)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "150"
Text.s = Wait(ConnectionID, 5000)
Delay(100)
Result.s = Wait(Passive, 5000)
CloseNetworkConnection(Passive)
Text.s = Wait(ConnectionID, 5000)
ProcedureReturn Result
EndIf
CloseNetworkConnection(Passive)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure.l FTP_DownloadFile(ConnectionID, SFile.s, DFile.s)
If ConnectionID
SendNetworkString2(ConnectionID, "TYPE I"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "200"
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "227"
Passive = OpenNetworkConnection(PassiveIP(Text.s), PassivePort(Text.s))
If Passive
SendNetworkString2(ConnectionID, "RETR "+SFile+EOL)
Delay(100)
Text.s = Wait(ConnectionID, 5000)
s = FindString(Text, "(", 1)+1
l = FindString(Text, " ", s)-s
Size = Val(Mid(Text, s, l))
If Left(Text, 3) = "150"
*Buffer = AllocateMemory(1024)
Text = ""
s = 0
If CreateFile(0, DFile)
While s < Size
Size2 = ReceiveNetworkData(Passive, *Buffer, 1024)
If Size2 > 0
s + Size2
WriteData(*Buffer, Size2)
EndIf
Wend
CloseFile(0)
EndIf
FreeMemory(*Buffer)
CloseNetworkConnection(Passive)
Text.s = Wait(ConnectionID, 5000)
ProcedureReturn 1
EndIf
CloseNetworkConnection(Passive)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure.l FTP_UploadFile(ConnectionID, SFile.s, DFile.s)
If ConnectionID
SendNetworkString2(ConnectionID, "TYPE I"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "200"
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "227"
Passive = OpenNetworkConnection(PassiveIP(Text.s), PassivePort(Text.s))
If Passive
SendNetworkString2(ConnectionID, "STOR "+DFile+EOL)
Delay(100)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "150"
*Buffer = AllocateMemory(FileSize(SFile))
If ReadFile(0, SFile)
ReadData(*Buffer, FileSize(SFile))
CloseFile(0)
EndIf
SendNetworkData(Passive, *Buffer, FileSize(SFile))
FreeMemory(*Buffer)
CloseNetworkConnection(Passive)
Text.s = Wait(ConnectionID, 5000)
ProcedureReturn 1
EndIf
CloseNetworkConnection(Passive)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure FTP_DeleteDirectory(ConnectionID, Dir.s)
If ConnectionID
SendNetworkString2(ConnectionID, "RMD "+Dir+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_RenameFile(ConnectionID, FromName.s, ToName.s)
If ConnectionID
SendNetworkString2(ConnectionID, "RNFR "+FromName+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "350"
SendNetworkString2(ConnectionID, "RNTO "+ToName+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
ProcedureReturn 1
EndIf
EndIf
EndIf
EndProcedure
Procedure FTP_DeleteFile(ConnectionID, File.s)
If ConnectionID
SendNetworkString2(ConnectionID, "DELE "+File+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_CreateDirectory(ConnectionID, Dir.s)
If ConnectionID
SendNetworkString2(ConnectionID, "MKD "+Dir+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "257"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_DirectoryUp(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "CDUP"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_NoEvent(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "NOOP"+EOL)
Text.s = Wait(ConnectionID, 5000)
EndIf
EndProcedure
Procedure FTP_Quit(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "QUIT"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "221"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.