 |
Um auf Ereignisse und Befehle zu
reagieren können Sie Scripte verwenden, die durch den Server
verfügbar sind.
Unterstützte Scriptsprachen sind: VBScript, JScript.
Jedes Script muss sich im Verzeichnis /Scripts befinden.
|
|
 |
Hier ist eine Liste der
Funktionen, die aufgerufen werden können:
OnSiteXXXXX wobei XXXXX Ihr SITE Kommando ist, klein geschrieben!
Dieses Funktion erscheint, wenn ein User ein SITE Kommando eingibt
(Beispiel "SITE BLA
test test2" ruft die Funktion OnSitebla("test test2") auf).
Hinweis: SITE Kommandos werden klein
geschrieben, angepasst für Scriptsprachen die 'case sensitive'
sind
wie JScript; VBScript ist case insensitive:
SITE TEST würde OnSitetest starten, in JScript aber nicht
OnSiteTEST.
Es ist Ihnen überlassen weitere Parameter zu übergeben.
Die folgenden Funktionen werden ohne Parameter aufgerufen:
OnClientConnected: Benutzer meldet sich an
OnClientDisconnected: Benutzer hat sich abgemeldet
OnClientBanned: Verbindungsversuch eines gesperrten Benutzers
OnClientHammering: Benutzer hat den Server "gehämmert", wurde
gesperrt und die Verbindung getrennt
OnSameIPConnect: Benutzer wurde getrennt weil zu viele Verbindungen
für diese IP vorhanden waren
OnTooManyClient: Benutzer wurde getrennt weil zu viele
Verbindungen für dieses Konto vorhanden waren
OnClientTimeOut: Benutzer wurde wegen Zeitüberschreitung getrennt
OnClientLoggedIn: erfolgreiche Benutzeranmeldung
OnDomainClosed: Domain ist offline
OnDomainOpened: Domain wurde gestartet
OnDomainStarted: neue Domain wurde erstellt
OnDomainStopped: Domain wurde gelöscht
OnEvery05Minutes, OnEveryDay, OnEveryHour: nur für Domainscripte
(werden alle 5min; volle Stunde; tägl. gestartet)
OnDirCreated: neuer Ordner erstellt
OnDirDeleted: Ordner wurde gelöscht
OnDirListed: Ordnerinhalt wurde aufgelistet
OnFileBanned: Benutzer versuchte eine verbotene Datei hochzuladen
OnFileDeleted: Datei wurde gelöscht
OnFileDownloaded: eine Datei wurde erfolgreich heruntergeladen
OnFileRenamed: Benutzer hat eine(n) Datei/Ordner umbenannt
OnFileUploaded: Benutzer hat eine Datei fertig hochgeladen
OnFileUploadFailed: Benutzer hat das hochladen abgebrochen oder es lag
ein Fehler vor
OnIPChanged: IP der Domain hat sich geändert
OnQuotaExceeded: Benutzer hat sein Konten quota überschritten
Die folgende Funktion kann mit einem Parameter aufgerufen werden:
OnScriptError(error): ein Scriptfehler ist aufgetreten, der Parameter
ist die Fehlernachricht
Hinweis:
Jeder Client hat eine Instanz eines Scripts. Es können also zwei
Scripte gleichzeitig laufen und eine Datei kann durch ein Script
blockiert sein, das sie grade geöffnet hat.
Verfügbare Objekte für Scripte:
:-------------------------------------------------------------
Objekte Script
string FileName: den Scriptnamen erhalten
boolean IsDomainContext: Gibt aus ob ein Script nur
Domainabhängig läuft. Wenn es Domainabhängig läuft,
sind Client Objekte nicht verfügbar.
int Timeout: Gibt den Timeout für Scripte aus und setzt den Wert
neu, setzt man einen neuen Wert wird der Timeout resettet, 0= unbegrenzt
void Include(string scriptPath): ein Script laden und parsen
void Sleep(int Msec): warte für Msec Millisekunden
:-------------------------------------------------------------
Objekte Werkzeuge
string CRCFile(String path): Berechne den CRC einer Datei und gebe ihn
aus
string CRCStr(String str): Berechne den CRC eines String und gebe ihn
aus
string FormatSize(int size): Gebe die Größe aus,
entsprechend
seinem Wert formatiert. Der Wert bekommt den passenden Anhang
TBytes, GBytes, MBytes, KBytes oder
Bytes
string FormatSize(int size, int FormatStyle, boolean
LongForm): Gibt die Größe aus, entsprechend seinem
Formatierungstyp und langer Schreibweise (langer oder kurzer
Suffix:
KBytes or KB). Formatierungstyp = 1 Anzeige in Bytes, 2 in
KBytes, ...
string MD5File(String path): Berechne den MD5 hash einer Datei und
gebe ihn aus
string MD5Str(String str): Berechne den MD5 hash eines String und
gebe ihn aus
string SHA1File(String path): Berechne den SHA1 hash einer Datei
und gebe ihn aus
string SHA1Str(String str): Berechne den SHA1 hash eines String
und gebe ihn
:-------------------------------------------------------------
Objekte Server
string CertificatePath: Gib den Pfad aus, in dem Zertifikate
gespeichert
werden
string LogPath: Gib den Pfad aus, in dem Log Dateien gespeichert werden
string ScriptPath: Gib den Pfad aus, in dem Scripte gespeichert werden
string ServerPath: Gib den Anwedungspfad des Servers aus
:-------------------------------------------------------------
Objekte Domain
int Bandwidth: Gib derzeitige Bandbreite in Bytes/Sekunde aus
int Bandwidth_in: Gib derzeitige Bandbreite für den Upload
in Bytes/Sekunde aus
int Bandwidth_out: Gib derzeitige Bandbreite für den
Download in Bytes/Sekunde aus
int ClientCount: Gib die Anzahl der Clients aus, die derzeit mit der
Domain verbunden sind
int UserCount: Gib die Anzahl der Clients aus, die auf der Domain
gemeldet sind
int DownloadCount: Gib die Anzahl der Clients aus die runterladen
int UploadCount: Gib die Anzahl der Clients aus die hochladen
string Name: Gib den Namen der Domain aus
date StartTime: Gib Datum/Zeit aus, wann die Domain gestartet ist
void WriteToLog(String log): Wenn Protokolle aktiviert sind, Parameter
in Protokoll schreiben
:-------------------------------------------------------------
Objekte Client
string AccountName: Gib den Accoutnamen auf dem Client aus, kann
unterschiedlich zum Usernamen sein wenn mit Alias eingeloggt wurde
date ConnectionDateTime: Gib Zeit/Datum der Verbindung aus
string HostName: Gib des Hostnamen des Clienten aus (wenn ResolveIP
aktiviert ist)
string ID: Gib die Client ID aus
string PeerIP: Gib die öffentliche IP Adresse des Clienten aus
int PeerPort: Gib den öffentlichen Port des Clienten aus
string LocalIP: Gib die lokale IP Adresse des Clienten aus
int LocalPort: Gib den lokalen Port des Clienten aus
string Keyword: Gib das derzeitige Schlüsselwort eines Kommandos
aus
string Directory: Gib den derzeitigen virtuellen Ordner des Clienten
aus
string DirectoryReal: Gib den derzeitigen Pfad des Clienten aus
int Downloaded: Gib die Summe der gesendeten Bytes des Clienten aus
int Uploaded: Gib die Summe der empfangenen Bytes des Clienten aus
boolean Logged: Gebe true aus, wenn der Client eingeloggt ist
int RestartPos: Gib die, die Position aus bei Neustart verwendet wird
string Username: Gib den Usernamen des Clienten aus
string Filename: Gib den derzeitigen virtuellen Dateinamen aus
(Beispiel
"/temp/file.txt")
string FilenameReal: Gib den derzeitigen Dateinamen aus
(Beispiel
"C:\temp\file.txt")
int FileSize: Gib die Grösse der zuletzt übertragenen Datei
aus
int FilePosition
int Speed: Gib die Durschnittsgeschwindigkeit in Bytes/Sekunde der
letzten 5 Sekunden des Clienten aus
int Speed_In: Gib die Durschnittsuploadgeschwindigkeit in
Bytes/Sekunde der letzten 5 Sekunden des Clienten aus
int Speed_Out: Gib die Durschnittsdonwloadgeschwindigkeit in
Bytes/Sekunde der letzten 5 Sekunden des Clienten aus
int TransferTimeSeconds : Gib die Übertragungszeit in Sekunden aus
string TransferTime: Gib die Übertragungszeit aus. Format
"00:00:00"
int TransferSpeedBps: Gib die Übertragungsgeschwindigkeit in
Bytes/Sekunde aus
string TransferSpeed: Gib die Übertragungsgeschwindigkeit in
KBytes/Sekunde aus. Format "128 KBytes/s"
boolean IsSecure: Gib aus, ob die Steuerungsverbindung zum
Clienten sicher ist
boolean IsTransferSecure: Gib aus, ob die Datenverbindung zum
Clienten sicher ist
void ConvertToReal(string path): Konvertiert einen virtuellen Pfad
(Beispiel /temp) zu dem physischen Pfad (Beispiel C:\Temp)
void Kick(): trenne den Clienten vom Server
void Post(string Message): sende eine Nachricht zum Clienten: sie wird
vom Server formatiert und der nächsten Server Antwort vorangestellt
void Post(string Message, boolean ProcessTags): sende eine
Nachricht zum Clienten: sie wird vom Server formatiert und der
nächsten Server Antwort angehängt
void Post(string Message, boolean ProcessTags, boolean
Append): sende eine Nachricht zum Clienten: sie wird vom
Server
formatiert und der nächsten Server Antwort angehängt oder
vorangestellt
void Send(string Message): sende einen String zum Clienten
void send(int Code, string Message): sende einen FTP formatierten
String, Beispiel 200 ok
|
 |
 |
'SCRIPT: Log downloads.vbs
'AUTHOR: Gene6
'DATE: 2002/10/04
'DESC: Protokolliere jeden Download in eine Log-Datei
' Jeder Eintrag hat die Form "date
time#Username#Filename#filenamereal#from#to#time#Speed
'Constants
Delimiter = "#"
ForAppending = 8
'Create the file path
strYear = Year(Date)
strMonth = Month(Date)
' add the leading zero
if (strMonth < 10) Then
strMonth = "0" & strMonth
end if
strDay = Day(Date)
' add the leading zero
if (strDay < 10) Then
strDay = "0" & strDay
end if
LogFilename = Server.LogPath & Domain.Name & "-" & strYear
& "-" & strMonth & "-" & strDay & "-downloads.log"
sub OnFileDownloaded()
Set fso = CreateObject("Scripting.fileSystemObject")
Set LogObj = fso.OpenTextFile(LogFilename, ForAppending, true)
Line = FormatDateTime(Now) & Delimiter & Client.Username &
Delimiter & Client.Filename & Delimiter &
Client.FilenameReal & Delimiter & Client.RestartPos &
Delimiter & Client.FilePosition & Delimiter &
Client.TransferTime & Delimiter & Client.TransferSpeed
LogObj.WriteLine(Line)
LogObj.Close
end sub
|
 |
 |
Sie können auch Funktionen
schreiben, die vom Server als Reaktion auf Aktionen des Clienten
aufgerufen werden, bevor der FTP Server die Aktion ausführt.
Als Möglichkeit, Sie können eine Funktion erstellen, die den
Dateiupload verbietet wenn ein Dateischema nicht zutrifft oder auch
eine Datei auf Viren überprüfen und vom Server löschen
lassen wenn ein Infekt gefunden wird, incl. einer Server Antwort an den
User.
Ein neues Objekt, was Veränderungen am Server Verhalten erlaubt
ist als globale Konstante verfügbar:
Objekt Hook
boolean DeleteFile: Erlaube oder verbiete das Löschen von Datei,
die durch den Clienten hochgeladen wurden. Kann nur in
HookStoreFinished benutzt werden
int Result: erlaube Modifikationen am Ergebnis der Client Operationen
void SetReply(int Code, string Message): modifiziere die Antwort, die
zum User gesendet wird wenn Hook.Result anders als 0
Dieses Objekt kann in folgenden Funktionen benutzt werden:
HookChangeDirectory(FileName, FileNameReal): Client versucht
Verzeichnis zu wechseln
Mögliche Rückgabewerte von Hook.Result:
0: erlaubt
1: verweigert
2: Verzeichnis nicht gefunden
HookDeleteFile(FileName, FileNameReal): Client versucht eine Datei zu
löschen
Mögliche Rückgabewerte von Hook.Result:
0: erlaubt
1: verweigert
2: Datei nicht gefunden
3: Datei konnte nicht gelöscht werden
HookMakeDirectory(FileName, FileNameReal): Client versucht ein
Verzeichnis zu erstellen
Mögliche Rückgabewerte von Hook.Result:
0: erlaubt
1: verweigert
2: Verzeichnis konnte nicht erstellt werden
3: Verzeichnis existiert bereits
HookMove(FileName, FileNameReal, ToFileName, ToFileNameReal): der
Client versucht eine Datei oder ein Verzeichnis zu verschieben oder
umzubenennen
Mögliche Rückgabewerte von Hook.Result:
0: erlaubt
1: verweigert
2: Datei nicht gefunden
Hinweis:
ToFileName et ToFileNameReal are empty if at RNFR step of the RNFR/RNTO
command.
HookRemoveDirectory(FileName, FileNameReal): Client versucht ein
Verzeichnis zu löschen
Mögliche Rückgabewerte von Hook.Result:
0: erlaubt
1: verweigert
2: Verzeichnis nicht gefunden
3: Verzeichnis konnte nicht gelöscht werden
HookRetrieve(FileName, FileNameReal): Client versucht eine Datei zu
laden
Mögliche Rückgabewerte von Hook.Result:
0: erlaubt
1: verweigert
2: Datei nicht gefunden
3: Datei konnte nicht geladen werden
4: Übertragung ist nur mit sicherer Verbindung erlaubt
5: nicht genügend Credits
sub HookRetrieveFinished(FileName, FileNameReal): Client hat den
Download einer Datei beendet
Mögliche Rückgabewerte von Hook.Result:
0: Transfer ok
1: Transfer fehlgeschlagen
2: Festplatten fehler beim Transfer
3: nicht genügend Credits um Transfer fortzusetzen
4: Quota erreicht
5: Transferlimit ist erreicht
6: Transfergeschwindigkeit zu langsam
7: Transfer vom Server gestoppt (gebannter Client, vom Admin gestoppt,
Account deaktiviert, ...)
8: Reserviert
9: Partitieller Transfer
10: idle Timeout
11: Zertifikatsverhandlungen gescheitert
HookStore(FileName, FileNameReal): Client versucht eine Datei
hochzuladen
Mögliche Rückgabewerte von Hook.Result:
0: erlaubt
1: verweigert
2: Datei konnte nicht gespeichert werden
3: Übertragung ist nur mit sicherer Verbindung erlaubt
HookStoreFinished(FileName, FileNameReal): Client hat den Upload beendet
Mögliche Rückgabewerte von Hook.Result:
0: Transfer ok
1: Transfer fehlgeschlagen
2: Festplatten fehler beim Transfer
3: nicht genügend Credits um Transfer fortzusetzen
4: Quota erreicht
5: Transferlimit ist erreicht
6: Transfergeschwindigkeit zu langsam
7: Transfer vom Server gestoppt (gebannter Client, vom Admin gestoppt,
Account deaktiviert, ...)
8: Reserviert
9: Partieller Transfer
10: idle Timeout
11: Zertifikatsverhandlungen gescheitert
HookTag(Tag): ein ubekannter Tag wurde vom Server nicht ausgeführt
den Wert des tags kann Hook.SetText(string text) ausgeben,
die Parameter des Tags können Sie mit Hook.ParamCount() und
string
Hook.GetParam(int index) empfangen.
|
 |
 |
'SCRIPT: test hooks.vbs
'AUTHOR: Gene6
'DATE: 2004/08/01
'DESC: Simple script to test hooks
' Constants
cwdOk = 0
cwdNoRight = 1
cwdNotFound = 2
rmOk = 0
rmNoRight = 1
rmNotfound = 2
rmFailed = 3
mkdOk = 0
mkdNoRight = 1
mkdFailed = 2
mkdAlreadyExists = 3
mvOk = 0
mvNoRight = 1
mvNotfound = 2
mvFailed = 3
orOk = 0
orNoRight = 1
orNotfound = 2
orFailed = 3
orSecureTransferOnly = 4
orNotEnoughCredits = 5
owOk = 0
owNoRight = 1
owFailed = 2
owSecureTransferOnly = 3
tNormal = 0
tFailed = 1
tDiskError = 2
tRatioError = 3
tQuotaExceeded = 4
tTransferLimitReached = 5
tTransferTooSlow = 6
tAborted = 7
tCantOpenDataConnection = 8
tPartial = 9
tSessionTimeOut = 10
tSSLNegotiationFailed = 11
sub HookChangeDirectory(FileName, FileNameReal)
Hook.SetReply 550, "No right"
Hook.Result = cwdNoRight
end sub
sub HookDeleteFile(FileName, FileNameReal)
Hook.SetReply 550, "No right"
Hook.Result = rmNoRight
end sub
sub HookMakeDirectory(FileName, FileNameReal)
Hook.SetReply 550, "No right"
Hook.Result = mkdNoRight
end sub
sub HookMove(FileName, FileNameReal, ToFileName, ToFileNameReal)
Hook.SetReply 550, "No right"
Hook.Result = mvNoRight
end sub
sub HookRemoveDirectory(FileName, FileNameReal)
Hook.SetReply 550, "No right"
Hook.Result = rmNoRight
end sub
sub HookRetrieve(FileName, FileNameReal)
if StrComp(Right(FileNameReal, 4), ".zip", 1) < > 0 Then
Hook.SetReply 550, "No right, you can only download *.zip files"
Hook.Result = orNoRight
end if
end sub
sub HookRetrieveFinished(FileName, FileNameReal)
' place code here to do something when a client transfer stops
end sub
sub HookStore(FileName, FileNameReal)
if StrComp(Right(FileNameReal, 4), ".zip", 1) < > 0 Then
Hook.SetReply 550, "No right, you can only upload *.zip files"
Hook.Result = owNoRight
end if
end sub
sub HookStoreFinished(FileName, FileNameReal)
Set fso = CreateObject("Scripting.fileSystemObject")
Set fil = fso.OpenTextFile(FileNameReal, 1, true)
if StrComp(fil.Read(2), "PK", 0) < > 0 Then
Hook.SetReply 550, "This .zip file is not a true zip file ! It will be
deleted."
Hook.Result = tFailed
Hook.DeleteFile = true
end if
end sub
sub HookTag(Tag)
'this will write the tag in the file c:\tags.txt
Set fso = CreateObject("Scripting.fileSystemObject")
Set fil = fso.OpenTextFile("c:\tags.txt", 8, true)
fil.WriteLine(Tag)
fil.Close
'Handle the tag $TEST(param1, param2, ..)
if StrComp(Tag, "Test", 1) = 0 Then
Params = ""
for I = 0 to Hook.ParamCount-1
Params = Params & Hook.GetParam(I) & " "
Next
Hook.SetText "Hello " & Client.Username & chr(13) & "This
is a test tag and it seems to be working," & chr(13) & _
Hook.ParamCount & " parameters were passed, here is the list: "
& chr(13) & _
Params & chr(13)
end if
end sub
|
 |
|
|
|