DAUNY –
Socket-Befehlsliste v2003-02-23-1200
3. HTTP Datei runterladen [GET]
4. Befehl FTP Datei runterladen
[FTPGET]
5. Informationen zu einem Download
abrufen [STATUS]
6. Kurze Informationen zu einem
Download abrufen [CSTATUS]
7. Informationen zu einer Gruppe von
Downloads abrufen [SUMSTATUS]
8. Verbundene Benutzer abrufen
[USERS]
9. Passwort des aktuellen Benutzers
ändern [CHANGEPASSW ]
10. Programm Status abrufen [VAR]
11. Programm Status abrufen
[SYSINFO]
12. Programm Versionsinformation
abrufen [VER]
13. Text-Datei am Server speichern
[STORE]
14. Nachricht an Benutzer senden
[MESSAGE]
15. Automatische Nachricht wenn sich
Benutzer ändern [CUSER]
16. Inhalt einer HTML-Seite
runterladen [LGET]
17. Verzeichnis komprimieren
[COMPRESS]
18. Verschlüsselungs- Key für die
Verbindung abfragen [KEY]
19. Fortsetzen eines beendeten
Downloads [REGET]
20. Auflisten von
Unterverzeichnissen in einem Verzeichnis [DIR]
21. Abbrechen eines Downloads [STOP]
22. Auflisten von Dateien in einem
Verzeichnis [FILE]
23. Löschen eines Verzeichnis
[RMDIR]
24. Löschen einer Datei [RMFILE]
25. Löschen einer Datei über die Id
[RMFILEID]
26. Statistikdaten abfragen [STAT]
DAUNY –
HTTP-Proxy-Kommunikation Synatx v2002-01-19-1100
Request-Antwort (Befehlsantwort):
Das Dauny Kommunikationsprotokoll besteht aus einfachen Befehlen die über Socket-Kommunikation gesendet und empfangen werden.
Wichtig ist das jeder Befehl, und natürlich auch jede Antwort ,mit einem NULL Zeichen („\0“ in C) abgeschlossen wird. Dieses Zeichen kennzeichnet das Ende eines Kommandos.
Der Client muss darauf achten, dass Kommandos auch in mehreren Stücken ankommen können. Erst wenn das abschließende NULL Zeichen empfangen wurde ist der Befehl bzw. die Antwort komplett.
Befehl:
LOGIN <Benutzer> <Unverschlüsseltes Passwort>
oder
LOGINE < Benutzer > <Verschlüsseltes Passwort > Schlüssel siehe Befehl „KEY“
Antwort:
LOGIN OK
LOGIN ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
LOGOUT
Antwort:
Bye <Fehlernummer)
Befehl:
GET <URL> <Versuche>
<Priorität> <Verzeichnis> <max. Downloads am Server>
Tries: ‚Inf’ oder ‚0’ bedeutet unendlich
Übermittlung
mit Benutzer und Passwort:
ftp://user:password@host/path
http://user:password@host/path
Antwort:
GET <Prozess Nummer (ID)> <Status>
GET ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
FTPGET <URL>
<Versuche> <Priorität> <Verzeichnis> <Name> <Passwort>
Antwort:
OK <Prozess Nummer (ID)>
<Statusnummer>
ERROR <Fehlernummer>
Bye <Fehlernummer>
Befehl:
STATUS <Prozess Nummer (ID)>
Antwort:
STATUS <Prozess Nummer (ID)> <Benutzer> <URL> <Dateigröße> <Status> <Fehler> <erneute Versuche> <Forschritt [%]>
STATUS ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
CSTATUS <Prozess Nummer (ID)>
Antwort:
CSTATUS <Dateigröße> <Status>
CSTATUS ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
SUMSTATUS
<PART> <USER>
1 ... alle Dateien
2 ... alle beendeten Downloads
3 ... alle wartenden Dateien
4 ... alle aktuelle bearbeiteten
Dateien
5 ... alle abgebrochenen Dateien
6 ... alle erfolgreichen
Downloads
Wenn User gleich ALL (SUMSTATUS <PART> ALL) ist, werden alle Dateien unabhängig von Benutzer geschickt.
Antwort:
STATUS <Prozess Nummer
(ID)> <Benutzer> <URL>
<Statusnummer> <Fehlernummer>¿ (für alle angeforderten Dateien)
Befehl:
USERS
Antwort:
USERS <Benutzer 1>
<Benutze 2> <Benutzer 3> (es werden so viele
Benutzernamen zurückgeliefert wie verbunden sind)
Bye <Fehlernummer>
Befehl:
CHANGEPASSW <Unverschlüsseltes Passwort>
Antwort:
CHANGEPASSW ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
VAR
Antwort:
VAR <aktuelle Downloads> <Dateien in Warteschlange> <Fertig bearbeitete Dateien> <Verbundene Benutzer>
Bye <Fehlernummer>
Befehl:
SYSINFO
Antwort:
SYSINFO <Anzahl der Dateien> <Benutzter Festplattenspeicher des Benutzers> <Betriebsystemkennung> <Freier Festplattenspeicher >
SYSINFO ERROR <Fehler>
Beispiel:
SYSINFO 2 23
"Linux 2.4.18 [i586]" 355
Speicherangaben in MegaByte.
Befehl:
VER
Antwort:
VER <Programmname> <Versions-Nummer>.<Built-Nummer> (c) <Jahreszahl>
Bye <Fehlernummer>
Beispiel:
VER dauny 1.07 (c) 2001
Befehl:
STORE <Verzeichnis> <Dateiname> <Daten> Daten können bis zu 1000 Byte beinhalten
Datei wird im Append-Modus geöffnet.
Antwort:
STORE OK
STORE ERROR
<Fehler>
Bye <Fehlernummer>
Befehl:
MESSAGE <Benutzer> <Nachricht> Name eines Benutzers oder „*“ für alle Benutzer
(Nachricht kann bis zu 1000 Byte lang sein)
Antwort:
MESSAGE OK
MESSAGE ERROR <Fehler>
Bye <Fehlernummer>
Nachricht beim Client:
MESSAGE <Benutzer> <Nachricht> Name des Benutzers von dem die Nachricht gesendet wurde
Nachrichten können auch von System gesendet werden
Server sendet:
CUSERS <Benutzer 1>
<Benutze 2> <Benutzer 3> (es werden so viele
Benutzernamen zurückgeliefert wie verbunden sind)
Befehl:
LGET <URL> <Datei-Typen>
<Tiefe> <Versuche> <Priorität>
<Verzeichnis> <max. Downloads am Server>
Tries: ‚Inf’ oder ‚0’ bedeutet unendlich
Tiefe: ‚0’ bedeutet unendlich auf gleichen Server
Standard:
Datei-Typen ... „*“
Tiefe ... 1
DATEI-TYPEN mit Beistrich getrennt angeben z.B. LGET http://server.com/images.html *.jpg,.*.jpeg,*.gif
TIEFE gibt an wie weit die HTML Dateien rekursiv verarbeitet werden
Antwort:
LGET OK <Prozess Nummer (ID)> <Status>
LGET ERROR <Fehler>
Bye <Fehlernummer>
Beispiel:
LGET http://images.com *.jpg,*gif 1 5 5 Hompepage-Image-Rip
Befehl:
COMPRESS <Verzeichnis> <Komprimierungsprogramm> <Größe> Größenangabe in KiloByte
Komprimierungsprogramme:
ZIP Zip
(Standard)
TGZ Tar Gzip
RAR Rar (unterstützt Größenangabe bzw. Multiarchive)
Antwort:
COMPRESS OK
COMPRESS
ERROR <Fehler>
Bye <Fehlernummer>
Beispiel:
COMPRESS Debian2.2r3 RAR 5000
Befehl:
KEY
Antwort:
KEY <40 Hexzeichen [0123456789ABCDEF]>
Dies ist der einzige Befehl der gesendet werden kann ohne das sich der Client am Server angemeldet hat.
Befehl:
REGET <Prozess Nummer (ID)>
Antwort:
REGET OK <New Prozess Nummer (ID)> <Status>
REGET ERROR <Fehler>
Bye <Fehlernummer>
Beim diesem Befehl wird eine neue Prozess Nummer (ID) vergeben.
Befehl:
DIR <Verzeichnis>
Antwort:
DIR OK „<Verzeichnisname1>“ „<Verzeichnisname2>“ (es werden so viele Verzeichnisse zurückgeliefert wie vorhanden sind)
DIR ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
STOP <Prozess Nummer (ID)>
Antwort:
STOP OK
STOP ERROR
<Fehler>
Bye <Fehlernummer>
Ist der Download aktiv so wird er abgebrochen. Befindet sich der Download lediglich in der Warteschlange so wird der Download entfernt.
Befehl:
DIR <Verzeichnis>
Antwort:
FILE OK „<Datei1>“ „<Datei2>“ (es werden so viele Dateien zurückgeliefert wie vorhanden sind)
FILE ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
RMDIR <Verzeichnis>
Antwort:
RMDIR OK
RMDIR ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
RMFILE <Datei>
Antwort:
RMFILE OK
RMFILE ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
RMFILEID <Prozess Nummer (ID)>
Antwort:
RMFILEID OK
RMFILEID ERROR <Fehler>
Bye <Fehlernummer>
Befehl:
STAT <Prozess Nummer (ID)>
Antwort:
STAT <Online Zeit> <Online Zeit (Version)> <Download Volumen [MB]> <Download Volumen (Version) [MB]> <Programm Laufzeit> <Programm Laufzeit (Version)>
Bye <Fehlernummer>
Statistiken beziehen sich auf den aktuell laufenden Dauny Prozess. (Version) Statistiken beziehen sich auf die Daten der Dauny Version, d.H. solange die Dauny Version gleich bleibt werden
,auch nach einem Neustart des Programm, die Daten aufgezählt.
"Online Zeit" beinhaltet die Zeit die Online, mit Downloads bzw. warten auf Downloads (automatische Wiederholungen), verbracht wurde.
"Download Volumen" beinhaltet die Größe in MB der heruntergeladenen Dateien.
"Programm Laufzeit" zeigt die Laufzeit des Programms.
Beispiel:
STAT 00:00:30 01:20:12 5.20 119.58 01:20:22 40:02:35
Programm war 30 Sekunden online.
Aktuelle Dauny Version war 1 Stunde 20 Minuten und 12 Sekunden online.
Programm hat 5.2 MB heruntergeladen.
Aktuelle Dauny Version hat 119.58 MB heruntergeladen.
Programm läuft seit 1 Stunde 20 Minuten uns 22 Sekunden.
Aktuelle Dauny Version läuft seit 40 Stunde 2 Minuten und 35
Sekunden.
Anmerkung
Fehlernummer, Statusnummer und Prioritäten können aus dem Header „errors.h“ entnommen werden.
Sollte versucht werden einen Befehl oder eine Zeichenkette ohne „Login“ an den Server zu senden so wird „Bye <Fehlernummer>“ zurückgeschickt und der Socket geschlossen. Als Ausnahme gilt nur der befehl „Key“ der für die Übertragung des verschlüsselten Passwortes benötigt wird.
Grundsätzlich gilt wenn der Server „Bye“ zurückschickt wird danach der Socket geschlossen.
Wenn kein Fehler vorliegt wird die Fehlernummer 0 zurückgesendet.
Bei allen Verzeichnis-Angaben wird eine automatische Verzeichnistrennzeichen (Windows „\“ und Linux „/“) Konvertierung vorgenommen. Das bedeutet auf einem Linux-Server kann kein Backslash („\“) in dem Verzeichnisnamen vorkommen.
Komprimierungsprogramme:
Für den Befehl „compress“ werden Standard Komprimierungsprogramme verwendet:
Für ZIP - Kompression mit Programm „zip“ (Version 2.3).
Für TGZ - Kompression mit Programm „tar“ (Version 1.3.17) und „gzip“ (Version 1.2.4).
Für RAR - Kompression mit Programm „rar“ (Version 2.80 Shareware).
Markierung:
Rot markierte Übergabeparameter sind Optional ( es werden Standardwerte verwendet) |
Grau markierte Befehle und Übergabeparameter sind noch nicht realisiert (Realisierung ist oder war vorgesehen) |
Ein Dauny Client kann mit dem Server auch über einen HTTP-Proxy-Server kommunizieren.
Dazu ist aber ein etwas modifiziertes Übertragungsprotokoll einzuhalten das als HTTP-Protokoll „durchgeht“.
Befehl:
HEAD
http://<Server-Adresse>:<Server Port>/ HTTP/1.1
User-Agent:
Dauny Client
Host:
<Server-Adresse>:<Server Port>
Connection:
Keep-Alive
Proxy-Connection:
Keep-Alive
Dauny USER: <Benutzername>
Dauny PASS:
<Passwort>
Dauny CMD: <Dauny Befehl>
Jeder Parameter wird mit einem Windows Zeilenumbruch („\r\n“) beendet.
Der Request selbst wird mit der Kombination „\r\n\18“ beendet (RequestEnd[4]={13,10,18,0);).
Beschreibung:
Der Request beginnt mit dem HTTP - Protokoll Befehl „HEAD“ gefolgt von der Server-Adresse und dem Server Port danach sollte immer ein abschließendes „/“ kommen um Probleme mit Proxyservern zu vermeiden.
Danach kommt die verwendetet HTTP - Protokollversion.
Weiters ist die Angabe „User-Agent: Dauny Client“ von entscheidender Bedeutung sie muss unbedingt enthalten sein damit der Server den Request auch akzeptiert. Die Angabe kann aber auch ergänzt werden um den Client genauer zu identifizieren zum Beispiel „User-Agent: Dauny Client Simple-Dauny-Client 1.2“.
Dann muss die Verbindungsart angegeben werden. „Connection: Keep-Alive” und “Proxy-Connection: Keep-Alive” zwingen den Proxy-Server dazu die Verbindung zum Server und zum Client bis zur Antwort aufrecht zu erhalten.
Die Angaben „Dauny USER“ und „Dauny PASS“ übertragen den Benutzernamen und das Passwort des Benutzers über den der Zugriff erfolgten soll.
„Dauny CMD“ beinhaltet den Befehl der an den Server übertragen werden soll.
Nachdem der Request nach diesen Vorgaben zusammengestellt wurde muss er nur noch an den HTTP-Proxy-Server (Proxy-Adresse:Proxy-Port) geschickt werden. Dieser Übernimmt dann automatisch die Weiterleitung des Requests an den Server und die Weiterleitung der Antwort zurück an den Client
Beispiel:
HEAD http://192.168.0.24:5560/ HTTP/1.1
User-Agent:
Dauny Client
Host:
192.168.0.24:5560
Connection:
Keep-Alive
Proxy-Connection:
Keep-Alive
Dauny USER: BENUTZER1
Dauny PASS:
PASSWORT1
Dauny CMD: ver
Befehl:
HTTP/1.0
200 OK
Server:
Dauny
Connection: Close
Dauny Answer: <Dauny Befehlsantwort>
Beschreibung:
Der Antwort die vom Proxy-Server an den Client übermittelt wurde beinhaltet in der ersten Zeile eine HTTP-Protokoll Zeile.
Die erste Angabe ist die HTTP – Protokollversion, dann eine Fehlercode und dann ein Fehlerbeschreiung als Text.
Im ersten Beispiel kann man so eine korrekte Zeile sehen, als Fehlercode wird dabei 200 und als Fehlertext OK übertragen (diese Zeile wurde vom Dauny-Server geschickt ).
Im zweiten Beispiel kann man eine Fehlerhaft Antwort sehen, beim Fehlercode handelt es sich um einen HTTP-Fehler der vom Proxy erzeugt wurde weil er den Dauny-Server nicht finden konnte. In der Fehlerhaften Antwort kann man deshalb auch nicht die „Dauny Answer“ Zeile finden die, die Antwort des Dauny-Servers auf den geschickten Befehl beinhaltet.
Als zusätzliches Identifikationsmerkmal wird die Zeile „Server: Dauny“ an die Antwort angehängt.
Beispiel:
HTTP/1.0
200 OK
Server:
Dauny
Dauny
Answer: VER dauny 1.26 (c) 2001
Connection: Close
Beispiel Fehler (Webwasher 3.0):
HTTP/1.0 500 Interner Server Fehler
Content-type: text/html
Pragma: no-cache
Einzelne Informationzeilen außer der erste im Request und in der Antwort können in einer beliebeigen Reihenfolge angegeben werden
Jeder Request-Anwort Abschnitt ist in sich geschlossen, darum muss auch bei jedem Befehl der Benutzer und das Passwort übertragen werden. Ist das Passwort oder andere wichtige Protokollparameter nicht korrekt so wird keine Antwort gesendet und der Socket geschlossen.
Durch dieses Verfahren sind einige Befehl im Proxymodus nicht möglich bzw. nicht sinnvoll:
Befehl „LOGIN“ wird nicht benötigt.
Befehl „CUSER“ wird nicht gesendet.
Nachrichten „MESSAGE“ können zwar versendet aber nicht empfangen werden.
Der Befehl „STORE“ kann nur eingeschränkt benützt werden da kein Zeilenumbruch („\n“) in den Daten enthalten sein darf.
Kommunikation wurde mit folgenden Proxy-Server getestet:
WebWasher 3.0
MS Proxy
2.0
WebWasher 3.0 -> MS Proxy 2.0 Verfasser: EVIL